2
respostas

[UTILIZAÇÃO DE HAVING] [Boas Práticas]

Implementei a seguinte query neste desafio.

SELECT YEAR(DATA_VENDA) AS ano,
FLOOR(SUM(IMPOSTO * F.TOTAL)) AS valor_imposto
FROM notas_fiscais AS NF
INNER JOIN `vw_faturamento` AS F ON NF.NUMERO = F.NUMERO
GROUP BY ano HAVING ano = 2016;

A utilização do HAVING em substituição ao WHERE não afetou o resultado da QUERY. É apenas mais uma forma de se fazer ou a utilização do WHERE seria uma boa prática? No caso em tela, utilizei uma view para praticar.

2 respostas

Oii Bruno, tudo bom?

Olha, tanto faz. Na verdade, cada uma tem sua utilização.

O WHERE funciona direto na linha. O HAVING funciona em resultados de agregadores de linhas, é mais usado com o GROUP BY. Também é importante resaltar que o where realiza a filtragem nas tabelas de origem, enquanto having realiza a filtragem na tabela resultante, como último passo da consulta.

Você pode até utilizar as duas em uma mesma consulta, um exemplo:

SELECT a.id, COUNT(a.id) qtde FROM sua_tabela a
WHERE a.um_campo_da_sua_tabela = 'um_valor_qualquer'
GROUP BY a.categoria
HAVING qtde > 5

Espero que isso te ajude. Qualquer coisa é só falar, beleza? :)

Muito obrigado pela explicação Maria Gabriela Cuenca.