Como usar HAVING para filtrar agrupamentos no SQL?
O HAVING no SQL é utilizado para filtrar os resultados após o agrupamento com GROUP BY. Diferente do WHERE, que filtra registros individuais, HAVING permite aplicar filtros em dados agregados.
Estrutura básica do HAVING
Se quisermos listar categorias que possuam mais de 10 produtos, podemos usar:
SELECT categoria, COUNT(*) AS total_produtos
FROM produtos
GROUP BY categoria
HAVING COUNT(*) > 10;
Aqui, HAVING filtra apenas grupos com mais de 10 registros.
Diferença entre WHERE e HAVING
| Cláusula | Quando usar? |
|---|---|
| WHERE | Para filtrar registros antes do agrupamento |
| HAVING | Para filtrar grupos após o agrupamento |
Usando HAVING com outras funções de agregação
Podemos aplicar HAVING a outras funções, como AVG() e SUM():
SELECT categoria, AVG(preco) AS preco_medio
FROM produtos
GROUP BY categoria
HAVING AVG(preco) > 100;
Isso retorna apenas categorias com preço médio acima de 100.
Usando HAVING com múltiplas condições
Podemos combinar condições com AND ou OR:
SELECT categoria, COUNT(*) AS total_produtos, AVG(preco) AS preco_medio
FROM produtos
GROUP BY categoria
HAVING COUNT(*) > 10 AND AVG(preco) > 50;
Isso retorna categorias que têm mais de 10 produtos e preço médio acima de 50.
Cuidados ao usar HAVING
HAVINGsó pode ser usado após um GROUP BY.- Se precisar filtrar antes do agrupamento, use
WHERE. - Em bases grandes,
HAVINGpode impactar o desempenho. Prefira filtrar o máximo possível com WHERE antes do GROUP BY.
Quando usar HAVING no SQL para segmentar dados?
O uso do HAVING no SQL é essencial para relatórios que precisam filtrar grupos de dados já agregados. Por exemplo, em um sistema de vendas, podemos querer listar apenas os clientes que compraram acima de um determinado valor total. Em um banco de dados de notas escolares, HAVING pode ser usado para encontrar turmas cuja média dos alunos esteja abaixo da nota mínima. Combinado com GROUP BY, HAVING permite criar consultas detalhadas e segmentadas para diferentes análises.
Algumas aplicações:
- Filtrar categorias com mais de um certo número de produtos
- Selecionar clientes que gastaram acima de um valor mínimo
- Listar turmas cuja média esteja abaixo de um valor específico
- Obter regiões onde as vendas totais ultrapassaram um certo limite
- Filtrar funcionários que registraram mais de um número mínimo de vendas
Dicas para quem está começando
- Use
HAVINGsempre depois deGROUP BY - Se precisar filtrar antes do agrupamento, utilize
WHERE - Evite
HAVINGem consultas muito grandes sem otimizar comWHEREantes - Combine
HAVINGcomORDER BYpara visualizar os dados de forma organizada - Teste diferentes filtros com
HAVINGpara compreender seu impacto nos resultados
Rodrigo Martins
Especialista em bancos de dados SQL e otimização de consultas para aplicações críticas.
Mais sobre o autor