1
resposta

Não precisa de Max ou da Expressão inteira no GROUP BY!

Na hora de incluir a expressão do mês ano no GROUP BY, o instrutor pede pra colocar a expressão inteira, sem o 'alias'. Acho que a solução mais "clean" é colocar o próprio alias! Funcionou também.

Outra coisa, na hora de colocar o volume de compras, a sugestão foi usar o comando MAX para agrupamento. Rodei sem ele, e como os dados que agrupo são os mesmos, o MAX também não é necessário, o agrupamento é feito corretamente

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 
, TC.VOLUME_DE_COMPRA AS QUANTIDADE_LIMITE FROM NOTAS_FISCAIS NF
INNER JOIN ITENS_NOTAS_FISCAIS 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;
1 resposta

Olá Felipe, tudo bem? Ótimas dicas, só uma questão que talvez seja o motivo que o instrutor colocou dessa forma, como falei nesse outro tópico existe a questão da sequência (precedência) de execução das instruções e sempre colocar ALIAS depois da instrução WHERE não é uma boa ideia, então acho que o instrutor assume isso como uma boa prática e prefere usar a expressão inteira. Mas realmente suas dicas são bem válidas. Continue assim e bons estudos!