Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Função case dentro do Group By

Estudando a função case, vi essa query de rotular os produtos pelo preço, que tem dois CASE, e aparentemente não funciona sem o segundo. Realmente não entendi a função do segundo CASE.

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
1 resposta
solução!

Oi, Felipe. Como você está?

Entendo sua confusão, a função CASE pode ser um pouco complexa no início.

Nessa consulta SQL, você está usando a cláusula GROUP BY para agrupar os dados. No entanto, você está agrupando não apenas pela coluna "EMBALAGEM", mas também pelo resultado da função CASE.

O segundo CASE no GROUP BY é necessário para garantir que os dados sejam agrupados corretamente de acordo com o status do preço que você definiu no primeiro CASE. Sem o segundo CASE, o SQL não saberia como agrupar os dados, pois o status do preço ('PRODUTO CARO', 'PRODUTO EM CONTA', 'PRODUTO BARATO') não é uma coluna real em sua tabela, mas um rótulo que você criou com a função CASE.

Para ilustrar, imagine que você tenha uma tabela de produtos com diferentes tipos de embalagem e preços variados. Sem o segundo CASE, o SQL tentaria agrupar por embalagem e por um rótulo de preço que ele não reconhece. Com o segundo CASE, ele pode agrupar corretamente por embalagem e pelo rótulo de preço que você definiu.

Espero ter ajudado com o entendimento dessa query. Com a prática constante, tenho certeza que ficará mais fácil :)

Abraços!