1
resposta

Case depois do Group

Fiz um sem e o outro com o CASE no GROUP BY, o resultado foi o mesmo. Ainda não consegui entender a finalidade do CASE após o GRPUP

SELECT nome,
CASE 
    WHEN preco >= 12 AND preco <= 49 THEN 'Produto Barato'
    WHEN preco >= 50 AND preco <= 100 THEN 'Produto em Conta'
    ELSE 'Produto caro'
END AS 'Status Preço', AVG(preco) AS 'Preço Médio'
    FROM produtos
    GROUP BY nome,
    CASE 
    WHEN preco >= 12 tHEN 'Produto Barato'
    WHEN preco >= 50 AND preco <= 100 THEN 'Produto em Conta'
    ELSE 'Produto caro' END;



SELECT nome,
CASE 
    WHEN preco < 50 THEN 'PREÇO BARATO'
    WHEN preco >= 50 AND preco <= 125 THEN 'PREÇO EM CONTA'
    ELSE 'PREÇO CARO' 
    END AS 'STATUS PREÇO', AVG(preco)
    FROM produtos GROUP BY nome
1 resposta

Olá,

No seu caso em específico, aparentemente cada "nome" só possui uma possível resposta para o seu CASE, ou seja, é uma relação de 1:1, mas se você tiver algum caso que um mesmo "nome" tenha 2 valores distintos como resposta do seu CASE (nesse caso 2 alinhas com o mesmo nome, porém uma como "PREÇO BARATO" e outra com "PREÇO EM CONTA", por exemplo), o resultado das 2 consultas seria distintas.

O GROUP BY sempre acompanha uma função de agregação, no seu caso a função AVG. Na primeira consulta você pediu que sua query retornasse a média de preço para cada combinação de nome e "STATUS PREÇO" (o seu CASE). Na segunda consulta você pediu que sua query retornasse o preço médio de cada nome, então caso ele aparecesse em 2 linhas, ainda que o preço médio do "STATUS PREÇO" seja diferente, o banco retornaria o preço médio do nome, ou seja, o valor errado para aquela linha de "STATUS PREÇO".

Abs