Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Substituir parte do código pelo nome da coluna criada

Eu poderia substituir o segundo CASE pelo nome da coluna criada no primeiro CASE na hora de colocar no GROUP BY? O código passaria de:

SELECT EMBALAGEM, AVG(PRECO_DE_LISTA) AS 'PREÇO MÉDIO',
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_PREÇO 
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
ORDER BY EMBALAGEM;

Para:

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_PREÇO, AVG(PRECO_DE_LISTA) AS 'PREÇO MÉDIO'
FROM tabela_de_produtos
GROUP BY EMBALAGEM, STATUS_PREÇO  /* ao invés de passar o case novamente, passei o mesmo nome da coluna criada no primeiro case.*/
ORDER BY EMBALAGEM;

Nesse exemplo consegui o mesmo resultado que o professor (mesmos valores e mesmas colunas). Porém eu teria algum problema em uma situação diferente?

2 respostas
solução!

Boa noite Rafael,

Respondendo sua pergunta, não teria problema não. Só deve ser tomado um certo cuidado pois não é todo SGBD que permite agrupamento por alias. O oracle/sqlserver salvo engano, é um dos quais não permite agrupamento por alias. Fora o Mysql o PostgreSQL também permite esse tipo de comportamento.

Espero ter colaborado com sua dúvida.

Atenciosamente,

Muito obrigado pela ajuda, Breno