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
HAVING
só pode ser usado após um GROUP BY.- Se precisar filtrar antes do agrupamento, use
WHERE
. - Em bases grandes,
HAVING
pode 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
HAVING
sempre depois deGROUP BY
- Se precisar filtrar antes do agrupamento, utilize
WHERE
- Evite
HAVING
em consultas muito grandes sem otimizar comWHERE
antes - Combine
HAVING
comORDER BY
para visualizar os dados de forma organizada - Teste diferentes filtros com
HAVING
para compreender seu impacto nos resultados
Contribuições de Rodrigo Martins