1
resposta

Duvida na redundancia do case...

Pessoal, bom dia!!

Eu não consegui entender o porque temos que usar o CASE novamente no final do codigo, podem me explicar ??

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 WHERE sabor = 'Manga' 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 ORDER BY EMBALAGEM;

1 resposta

Olá, Alex.

Nessa query que você compartilhou são executados basicamente 5 operações: SELECT, FROM, WHERE, GROUPBY e ORDER BY. Ao executar uma query, essas operações são executadas em uma ordem já definida, de forma que o SELECT é executado depois da operação de GROUP BY. Então no SELECT quando você define essa nova coluna 'STATUS_PREÇO' que vem da instrução lógica definida no CASE WHEN, a operação de GROUP BY não enxergou essa coluna quando o agrupamento foi realizado, já que o GROUP BY ocorre antes do SELECT. Como você também tem o interesse de agrupar os resultados pela coluna 'STATUS_PREÇO' , você basicamente tem que definir ela novamente no GROUP BY, uma vez que quando o GROUP BY é realizado, a coluna 'STATUS_PREÇO' ainda não "existe", já que o SELECT é executado posteriormente. Quando você faz o agrupamento desta forma no GROUP BY, você não utiliza o 'alias', isto é, não usa o '.. AS STATUS_PREÇO' no final.

Espero ter ajudado