🧠 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

  • HAVING sempre vem depois do GROUP BY.

  • Só pode usar campos que estejam agregados (SUM, COUNT, AVG, etc.) ou que fazem parte do GROUP BY.

  • Não confunda com WHERE. WHERE filtra linhas. HAVING filtra grupos.

💡 Dicas

  • Use HAVING quando precisar de condições baseadas em valores agregados.

  • Quer analisar total de vendas por mês acima de 100 mil? É com HAVING.

  • Combine HAVING com ORDER BY pra organizar os grupos.

  • Pode usar AND, OR, IN, BETWEEN, tudo igual ao WHERE.

✅ 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.