Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luciano Rodrigo

Select de um produto maior que a média

Recommended Posts

Desculpa criar outro tópico, mas a dúvida é diferente para a mesma lista de exercícios.

Abaixo seguem as tabelas e o conteúdo delas.

Queria saber como resolver essa questão:

 

Quais os produtos que custam mais do que o custo médio de todos os produtos?

 

Eu consigo retornar a média de preço de todos os produtos e o preço de cada um dos produtos, mas não consigo fazer a comparação entre esses dados e colocar o nome do produto.

 

Minhas consultas:

 

[b]Retorna o custo para fabricar cada um dos produtos:[/b]
(select sum(insu.qtd*mat.precounitario)
from produto produ join insumos insu on produ.idproduto = insu.idproduto
	  join materia_prima mat on insu.idinsumo = mat.idinsumo group by produ.descricao)

[b]Retorna a média [/b]  
(select sum(insu.qtd*mat.precounitario)/(select count(*) idproduto from produto)
from produto produ join insumos insu on produ.idproduto = insu.idproduto
	  join materia_prima mat on insu.idinsumo = mat.idinsumo)


create table produto (
idproduto integer,
descricao varchar(200),
composicao varchar(150),
constraint pk_idproduto primary key(idproduto)
)

create table insumos (
idproduto integer,
idinsumo integer,
qtd integer,
constraint pk_insumos_idproduto primary key(idproduto,idinsumo),
constraint fk_idproduto foreign key(idproduto) references produto(idproduto),
constraint fk_idinsumo foreign key(idinsumo) references materia_prima(idinsumo)
)

create table materia_prima (
idinsumo integer,
descricao varchar(150),
unidade varchar(2),
precounitario decimal(10,2),
constraint pk_idinsumo primary key(idinsumo)
)

insert into produto values(1,'Poste',NULL);
insert into produto values(2,'Bolo',NULL);
insert into produto values(3,'Pastel de Queijo',NULL);

insert into materia_prima values(10,'Cimento','SC',30.00);
insert into materia_prima values(11,'Areia','Mt',90.00);
insert into materia_prima values(12,'Pedreiro','Hh',10.00);
insert into materia_prima values(13,'Trigo','Kg',3.00);
insert into materia_prima values(14,'Açucar','Kg',2.00);
insert into materia_prima values(15,'Manteiga','Kg',3.50);
insert into materia_prima values(16,'Queijo','Kg',15.00);

/* Poste */
insert into insumos values (1,10,4);
insert into insumos values (1,11,3);
insert into insumos values (1,12,2);

/* Bolo */
insert into insumos values (2,13,3);
insert into insumos values (2,14,1);
insert into insumos values (2,15,1);

/* Pastel de Queijo */
insert into insumos values (3,13,1);
insert into insumos values (3,15,1);
insert into insumos values (3,16,1);

Compartilhar este post


Link para o post
Compartilhar em outros sites

colocar as tags code vai ajudar muito pra quem for te ajudar, a entender seu código melhor.

 

 

Poste assim:

[code]

 

//coloque todo seu código aqui

 

[/code]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma sub-query, onde realiza uma comparação entre a consulta externa e a interna verificando o valor retornado da externa com a tupla da interna. Como é possível ver, realizei a média de todos os produtos na externa e depois realizei a verificação da maior dentre elas com a consulta interna.

Também leia um pouco mais sobre funções de agregação, (MIN, MAX, AVG, COUNT) e entre outras. A lógica do enunciado se torna muito mais simples.

 

SELECT p.idproduto  as "Codigo do Produto", p.descricao as "Descricao", ROUND(AVG(m.precounitario),2) as "Preco Medio" 
FROM (produto p
INNER JOIN insumos i USING (idproduto))
INNER JOIN materia_prima m USING (idinsumo)
GROUP BY 1, 2 
HAVING AVG(m.precounitario) > ( SELECT ROUND(AVG(precounitario),2)
			FROM materia_prima				    
		      )
ORDER BY 1;

 

Preço médio de cada produto.

UhoA3.jpg

 

Preço médio de todos os produtos.

WNEOm.jpg

 

Preço de custo maior que a média de todos os produtos.

3iWMN.jpg

 

 

Espero que o resultado almejado seja esse, qualquer coisa é só gritar.

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.