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

GROUP BY sem o alias

Olá, bom dia. Já perguntei isso em outra oportunidade, mas ele afirma no vídeo aos 9 minutos que o GROUP BY tem que ser com a função, sem o alias MES_ANO. É bem enfático nisso. Queria entender pq de não poder usar o alias.

Aliás (com acento mesmo), usei o alias onde ele fala pra não usar, e funciona perfeitamente.

SELECT X.CPF
, X.NOME
, X.MES_ANO
, X.QUANTIDADE_VENDAS
, X.QUANTIDADE_LIMITE,
CASE WHEN (X.QUANTIDADE_LIMITE - X.QUANTIDADE_VENDAS) < 0 THEN 'INVÁLIDA'
ELSE 'VÁLIDA' END AS STATUS_VENDA
FROM (
SELECT NF.CPF
, TC.NOME
, DATE_FORMAT(NF.DATA_VENDA, '%Y-%m') AS MES_ANO
, SUM(INF.QUANTIDADE) AS QUANTIDADE_VENDAS
, MAX(TC.VOLUME_DE_COMPRA) AS QUANTIDADE_LIMITE 
FROM notas_fiscais AS NF
INNER JOIN itens_notas_fiscais AS INF
ON NF.NUMERO = INF.NUMERO
INNER JOIN tabela_de_clientes TC
ON TC.CPF = NF.CPF
GROUP BY NF.CPF, TC.NOME, MES_ANO
) X;

Na penúltima linha mesmo, ele usa:

GROUP BY NF.CPF, TC.NOME, DATE_FORMAT(NF.DATA_VENDA, '%Y-%m')
2 respostas

Olá Alvaro, tudo bem?

Sim, pode ser utilizado apenas o Alias ao invés de toda a função.

Quando o instrutor fala que não é para utilizar o Alias, ele se refere a não utilizar o Alias juntamente com a função, dessa forma:

GROUP BY NF.CPF, TC.NOME, DATE_FORMAT(NF.DATA_VENDA, '%Y-%m') AS MES_ANO

Se você utilizar dessa forma, um erro será retornado, por este motivo o instrutor enfatizou a não utilizar o Alias.

  • Você pode informar toda a função no group by, dessa forma:
    GROUP BY NF.CPF, TC.NOME, DATE_FORMAT(NF.DATA_VENDA, '%Y-%m')
  • Ou apenas o seu Alias:
    GROUP BY NF.CPF, TC.NOME, MES_ANO

Fala pra gente se você entendeu tudo certinho Alvaro!

solução!

Opa, tudo certo, obrigado.