2
respostas

Dúvida no case aula 3.11

Olá, não entendi pq temos de escrever o segundo case após GROUP BY EMBALAGEM.

SELECT EMBALAGEM, CASE WHEN PRECO_DE_LISTA >= 12 THEN 'PRODUTO CARO' WHEN PRECO_DE_LISTA >= 7 AND PRECO_DE_LISTA < 12 THEN 'PRODUTO EM CONTA' ELSE 'PRODUTO BARATO' END AS STATUS_PRECO, AVG(PRECO_DE_LISTA) AS PRECO_MEDIO FROM tabela_de_produtos GROUP BY EMBALAGEM,

CASE

WHEN PRECO_DE_LISTA >= 12 THEN 'PRODUTO CARO'

WHEN PRECO_DE_LISTA >= 7 AND PRECO_DE_LISTA < 12 THEN 'PRODUTO EM CONTA'

ELSE 'PRODUTO BARATO'

END;

2 respostas

Olá Hugo! O segundo case foi inserido para que a consulta possa ser agrupada por embalagem e status_preco. Como Status_preco é um alias ele não pode ser utilizado dentro do Group By, logo foi inserido todo case que é a informação correnpondente ao alias Status_preco. Dessa forma a consulta retornará a média de preço para cada Status_preco por embalagem.

Espero ter ajudado!!

Hugo,

A Elainny explicou bem, mas quero te oferecer uma regra que ensinava quando eu dava aula de SQL Server.

Para campos descritos entre o SELECT ... FROM existem uma separação enter os que são para apresentação e entendimento da informação, e os que são de calculo - que são a informação. Dito isto, os valores que desejamos verificar são os calculados, e os outros os que explicam quem é o valor. Assim poercebemos que valores de apresentação não são agrupados, pois não são contados ou tirados em média. E a regra é simples :

Todo valor que não puder ser agrupado por uma função de agregação (leia-se AVG/COUNT/MAX/MIN/SUM/etc deverá OBRIGATÓRIAMENTE ser agregado na cláusula GROUP BY, sem exceções.

Tratando-se de GROUP BY, lembre-se sempre desta regra !