3
respostas

Uso de CASE na segunda vez

Oi. Não entendi o porquê do uso do CASE na segunda vez. No uso do GROUP BY.

Como aqui:

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;

Por quê ele é usado? Qual o motivo? Qual o seu uso?

Obrigado.

3 respostas

Olá Marcelo,

Como você está fazendo uma sumarização, o GROUP BY serve para definir para quais "Grupos" a sumarização vai se basear.

No caso da sua query, você está calculando a média segundo à EMBALAGEM e STATUS_PRECO. Para isso, você deve deixar claro na cláusula de GROUP BY. Que foi o que você fez. Você colocou o campo EMBALAGEM e o campo que definiu o STATUS_PRECO (Case).

Veja: Caso genérico

SELECT
    campo_01,
    campo_02,
    AVG()
FROM
    tabela
GROUP BY
    campo_01,
    campo_02

Seu caso

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 

Espero ter ajudado.

Abs

Eu poderia ter usado o alias ao invés do último CASE?

como:

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, 
    SATUS_PRECO 

Boa pergunta.

Você não pode usar o Alias, porque para este Select, o Alias é só um apelido.

A estruturação do campo é dada pelo CASE. Portanto, quando você vai agrupar, o banco deve agrupar baseado no conceito que o CASE está formando e não no apelido do campo, pois a princípio, o apelido só significa algo para nós que estamos escrevendo a query.

Abs

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software