Junior
Qual é a diferença entre as construções WHERE e HAVING em SQL?
sobes.tech IA
Resposta da IA
WHERE filtra as linhas antes de agrupar (GROUP BY), influenciando quais as linhas que participarão nas funções de agregação. HAVING filtra os grupos depois de agrupar, com base nos resultados das funções de agregação.
| Característica | WHERE | HAVING |
|---|---|---|
| Aplicação | A linhas individuais | A grupos de linhas |
| Momento de processamento | Antes do GROUP BY | Depois do GROUP BY |
| Uso | Com campos da tabela, mas sem funções de agregação | Com resultados de funções de agregação ou campos de GROUP BY |
Exemplo de uso do WHERE:
SELECT nome_produto, preço
FROM produtos
WHERE category_id = 1; -- Filtra linhas **antes** de agrupar (se fosse necessário)
Exemplo de uso do HAVING:
SELECT category_id, COUNT(*) AS total_produtos
FROM produtos
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtra grupos **depois** de contar o quantidade total de produtos
Exemplo de uso conjunto:
SELECT category_id, AVG(preço) AS preço_médio
FROM produtos
WHERE stock > 0 -- Filtra apenas produtos em stock **antes** de agrupar
GROUP BY category_id
HAVING AVG(preço) < 100; -- Filtra grupos com preço médio menor que 100 **depois** de agrupar e calcular a média