3
respostas

Duvida sobre a consulta da aula

não entendi essa duplicação de CASE, poderia me ajudar a entender ?

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;
3 respostas

Olá Dayson, como você pode ver no primeiro CASE estamos usando junto com a função SELECT, então estamos chamando as informações usando condições(WHEN,ELSE). Já no segundo CASE estamos usando junto com a função GROUP BY, então estamos agrupando as informações seguindo a mesma lógica superior. Caso esse segundo CASE não fosse usado as informações estariam agrupadas apenas pelo campo embalagem.

poderia fazer assim ?

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, 
ORDER BY EMBALAGEM;

Não retornaria o resultado desejado no exercício. Pense da seguinte maneira: No primeiro exemplo onde temos os dois CASE nós estamos pegando os produtos com sabor Manga colocando eles todos em um grupo e dizendo qual estará barato, caro ou em conta. Caso você tire o segundo CASE só estaria retornando os produtos e colocando todos em grupos, mas não diria qual se está em conta ou não.