3
respostas

Como classificar o resultado de uma consulta? Não consigo classificar pelo preço médio.

Tentei fazer uma consulta que me pareceu pertinente. Qual o preço médio dos produtos por embalagem?

SELECT EMBALAGEM, AVG(PRECO_DE_LISTA) AS PRECO_MEDIO FROM tabela_de_produtos GROUP BY EMBALAGEM`

Acho que consegui. O resultado foi este: Garrafa 6,99; PET 16,64; Lata 3,99.

Em seguida tentei incluir a coluna Status_Preco, como fez o instrutor, mas em referência ao resultado obtido acima. Isto é, ao preço médio por embalagem.

Quando tento jogar o CASE depois do GROUP BY não consigo o quero. Na tentativa e erro saem coisas que não têm nada a ver ou que não rodam.

Por que isto não roda?

SELECT EMBALAGEM, AVG(PRECO_DE_LISTA) AS STATUS_PRODUTO FROM tabela_de_produtos GROUP BY EMBALAGEM, CASE WHEN STATUS_PRODUTO>30 THEN'CARO' WHEN STATUS_PRODUTO>20 THEN'EM CONTA' ELSE 'BARATO' END`

3 respostas

Olá Bruno, tudo bem? O que acontece é que não podemos usar o CASE no GROUP BY, a menos que o mesmo CASE no SELECT como o professor mostrou na aula. O que acontece é que nesse caso, você precisa usar o CASE no SELECT da seguinte forma:

SELECT EMBALAGEM,
AVG(PRECO_DE_LISTA) AS PRECO_MEDIO,
CASE 
    WHEN AVG(PRECO_DE_LISTA) > 30 THEN 'CARO' 
    WHEN AVG(PRECO_DE_LISTA) > 20 THEN'EM CONTA' 
    ELSE 'BARATO'
END AS STATUS_PRODUTO
FROM tabela_de_produtos
GROUP BY EMBALAGEM
ORDER BY EMBALAGEM;

Temos que usar o AVG dentro do CASE pelo fato do ALIAS PRECO_MEDIO ainda não existir quando executamos o AVG.

Espero ter ajudado!

Ok, mas deixando de lado o caso da aula e tomando o caso que propus na questão inicial...

Tem como ncluir a a coluna Status_Preco, sem ser fazendo uma subconsulta?

Não entendi muito bem Bruno, como assim "incluir a coluna Status_Preco, sem ser fazendo uma sub consulta?", onde estamos fazendo uma sub consulta? Porque na consulta:

SELECT EMBALAGEM,
AVG(PRECO_DE_LISTA) AS PRECO_MEDIO,
CASE 
    WHEN AVG(PRECO_DE_LISTA) > 30 THEN 'CARO' 
    WHEN AVG(PRECO_DE_LISTA) > 20 THEN'EM CONTA' 
    ELSE 'BARATO'
END AS STATUS_PRODUTO
FROM tabela_de_produtos
GROUP BY EMBALAGEM
ORDER BY EMBALAGEM;

Fazemos uma consulta simples, apenas com o CASE para podermos classificar os dados, então teria como você explicar melhor pra gente sobre essa parte?