Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

WHERE ou HAVING?

Olá a todos, gostaria de entender a diferença entre usar o WHERE e o HAVING. Antes de verificar a resposta do instrutor, construi meu código e utilizei o HAVING após o GROUP BY, como orientado anteriormente no curso. O resultado das querys foi idêntico.

Comparando os tempos de resposta entre os códigos, percebi que o do instrutor (WHERE), tem uma velocidade de execução dobrada em relação ao meu (HAVING).

Há alguma explicação para isso ocorrer e qual o impacto em códigos mais complexos?

Seguem os códigos:

HAVING

SELECT YEAR(A.DATA_VENDA) AS ANO, FLOOR(SUM(B.QUANTIDADE * B.PRECO * A.IMPOSTO)) AS FATURAMENTO
FROM notas_fiscais A INNER JOIN itens_notas_fiscais B
ON A.NUMERO = B.NUMERO
GROUP BY ANO
HAVING ANO = 2016;

WHERE

SELECT YEAR(DATA_VENDA), FLOOR(SUM(IMPOSTO * (QUANTIDADE * PRECO))) 
FROM notas_fiscais NF
INNER JOIN itens_notas_fiscais INF ON NF.NUMERO = INF.NUMERO
WHERE YEAR(DATA_VENDA) = 2016
GROUP BY YEAR(DATA_VENDA)
1 resposta
solução!

O HAVING você consegue utilizar com funções de agregação, o WHERE não. Por exemplo:

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;

Vai retornar de forma agrupada, apenas os países que possuam mais de 5 Customers. Você não conseguiria reproduzir esse mesmo SELECT com o WHERE.