1
resposta

Sem o case depois do GROUP BY

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)  FROM tabela_de_produtos
GROUP BY embalagem, 
CASE
    WHEN preco_de_lista >= 12 THEN 'Produto caro'
    WHEN preco_de_lista >= 7 ANDpreco_de_lista < 12 then 'Produto em conta'
    ELSE 'Produto barato' 
END;

se fizer um GROUP BY embalagem, status_preco dá o mesmo resultado eliminando a necessidade de um outro 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)  FROM tabela_de_produtos
GROUP BY embalagem status_preco;

Faz sentido?

1 resposta

Olá José Guilherme, tudo bem? Pode funcionar sim, porém temos uma condicional que determina esse agrupamento, então pode acontecer de ter o mesmo resultado, mas seguindo as boas práticas, penso que é melhor garantir que tenhamos sempre o resultado satisfatório, pense que esse comando possa ser utilizado em várias outras consultas, então se deixarmos brechas, podemos ter danos futuramente.

Espero ter esclarecido sua dúvida!