🧠 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 doGROUP BY
. -
Só pode usar campos que estejam agregados (
SUM
,COUNT
,AVG
, etc.) ou que fazem parte doGROUP 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
comORDER BY
pra 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.