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

Dúvida modulo 3, vídeo Classificar resultados.

Boa tarde, não entendi porque tenho que colocar o case depois do GROUP BY. Segue o código com setas na dúvida. Obrigado.

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, <<<<<<<<<<<<<<<<<<<<<< DÚVIDA AQUI.
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
solução!

Como o nome indica, GROUP BY é agrupar/condensar dados (linhas) com base em alguns campos chave, no seu caso você no Select usa EMBALAGEM e STATUS_PRECO (criado pela lógica do seu CASE) calculando na sequencia o preço medio. Note a função AVG que advém do termo "average", ela já denota que vai precisar agrupar pelos demais campos do seu Select (EMBALAGEM e STATUS_PRECO).

No seu CASE é uma derivação que classifica entre produtos caros/em conta e caros então você deve replicar tal trecho no GROUP BY para a base de dados agrupar as linhas e te entregar o preço médio dos produtos baratos, em conta e caros.

Exemplo fictício da tabela_de_produtos com algumas linhas

EMBALAGEMPRECO_DE_LISTA
A1
A5
B7
B9
B10
C15

Antes do agrupamento (GROUP BY) temos uma classificação assim através daquele CASE:

EMBALAGEMPRECO_DE_LISTARESULTADO DO CASE
A1PRODUTO BARATO
A5PRODUTO BARATO
B7PRODUTO EM CONTA
B9PRODUTO EM CONTA
B10PRODUTO EM CONTA
C15PRODUTO CARO

Agora vem o resultado do uso do agrupamento com média (AVG):

EMBALAGEMSTATUS_PRECOPRECO_MEDIO
APRODUTO BARATO3
BPRODUTO EM CONTA8,67
CPRODUTO BARATO15

Se ao invés da função AVG você tivesse usado SUM e alterado nome do campo para PRECO_TOTAL teria:

EMBALAGEMSTATUS_PRECOPRECO_TOTAL
APRODUTO BARATO6
BPRODUTO EM CONTA26
CPRODUTO BARATO15