🧠 Explicação
A cláusula HAVING serve para filtrar os resultados depois da agregação com GROUP BY. Ela funciona como um "pente fino" nos grupos já formados. É diferente do WHERE, que atua antes do agrupamento. O HAVING é essencial quando queremos restringir os resultados de funções como COUNT, SUM, AVG, etc.
🔧 Usos mais comuns
-
Remover grupos que não atingem determinada quantidade.
-
Eliminar médias ou totais abaixo (ou acima) de certo limite.
-
Complementar análises com filtros após o
GROUP BY.
🧾 Sintaxe
SELECT coluna, função_agregada
FROM tabela
GROUP BY coluna
HAVING condição_sobre_agregação;
💻 Exemplo prático
Mostrar departamentos com mais de 5 funcionários:
SELECT departamento, COUNT(*) AS total_funcionarios
FROM empregados
GROUP BY departamento
HAVING COUNT(*) > 5;
Exibir cargos com média salarial acima de R$ 7.000:
SELECT cargo, AVG(salario) AS media
FROM empregados
GROUP BY cargo
HAVING AVG(salario) > 7000;
📌 Regras
-
HAVINGsempre vem depois doGROUP BY. -
Só pode usar campos que estejam agregados (
SUM,COUNT,AVG, etc.) ou que fazem parte doGROUP BY. -
Não confunda com
WHERE.WHEREfiltra linhas.HAVINGfiltra grupos.
💡 Dicas
-
Use
HAVINGquando precisar de condições baseadas em valores agregados. -
Quer analisar total de vendas por mês acima de 100 mil? É com
HAVING. -
Combine
HAVINGcomORDER BYpra organizar os grupos. -
Pode usar
AND,OR,IN,BETWEEN, tudo igual aoWHERE.
✅ Conclusão
HAVING é o filtro final dos dados agrupados. Quando GROUP BY organiza os dados em blocos, é o HAVING que diz quais blocos ficam. Sem ele, você não consegue refinar resultados agregados. É a peneira pós-análise, usada em 9 de cada 10 relatórios sérios.