1
resposta

Uso da Clausula Having

Olá, gostaria primeiro de elogiar a didática do professor, e apresentar que a maneira que fiz, foi utilizando a Clausula Having, é curioso porque quando estudei banco de dados na faculdade, não conseguia enxergar uso para o Having e no exercício foi a primeira solução que veio na minha cabeça.

Gostaria de acrescentar que mesmo não colocando o Max em Volume de Compra o resultado veio da mesma forma, mas como bem entendi em programação, pode ter dado certo nesse caso, mas em outro momento não gostaria de saber qual problema pratico isso poderia me acarretar.

obs: Também não coloquei no GroupBy

/* Consulta - Vendas de Clientes por Mês */
select x.cpf, x.Nome, x.MesAno, x.QuantidadeTotal, x.QuantidadeLimite,
case when x.QuantidadeLimite - x.QuantidadeTotal < 0 then 'Invalida'
else 'Valida' end as Resultado,
(1 - (x.QuantidadeLimite/x.QuantidadeTotal)) * 100 as percentual
from (select nf.CPF, date_format(nf.DATA_VENDA, '%Y-%m') as MesAno, sum(inf.QUANTIDADE) QuantidadeTotal, tc.nome, tc.VOLUME_DE_COMPRA as QuantidadeLimite
from notas_fiscais nf 
inner join itens_notas_fiscais inf on inf.NUMERO = nf.NUMERO
inner join tabela_de_clientes tc on nf.CPF = tc.CPF 
group by nf.CPF, date_format(nf.DATA_VENDA, '%Y-%m'), tc.nome) as x
having resultado = 'Invalida'
order by x.nome





1 resposta

Olá Edilvando, tudo bem? Quanto ao uso do HAVING, não vejo nenhum problema, porém quando ao uso do MAX, nesse caso pode ter tido o mesmo resultado sem, por causa do GROUP BY da sua sub query, porém pode haver casos que não aconteça, então se você precisa do maior valor dessa consulta acho que é necessário o uso do MAX para evitar qual problema.

Espero ter ajudado!