Resposta direta: o GROUP BY junta as linhas de uma tabela em grupos (por região, por mês, por cliente) para você somar, contar ou tirar média de cada grupo. O HAVING filtra esses grupos depois do cálculo. A diferença para o WHERE é o momento: o WHERE filtra as linhas antes de agrupar, e o HAVING filtra o resultado já agrupado.
GROUP BY na prática
Com uma tabela de vendas, o total por região fica assim:
SELECT regiao, SUM(valor) AS total
FROM vendas
GROUP BY regiao;
Cada região vira uma linha no resultado, com a soma das vendas dela.
As funções que acompanham o GROUP BY
| Função | O que calcula |
|---|---|
SUM(coluna) | Soma |
COUNT(*) | Quantidade de linhas |
AVG(coluna) | Média |
MIN(coluna) e MAX(coluna) | Menor e maior valor |
HAVING: filtrando os grupos
Agora só as regiões que venderam mais de R$ 10 mil:
SELECT regiao, SUM(valor) AS total
FROM vendas
GROUP BY regiao
HAVING SUM(valor) > 10000;
Não dá para usar WHERE SUM(valor) > 10000, porque o WHERE roda antes da soma existir.
WHERE e HAVING juntos
Os dois podem aparecer na mesma consulta. Aqui, só as vendas de 2026, e depois só as regiões acima de R$ 10 mil:
SELECT regiao, SUM(valor) AS total
FROM vendas
WHERE data >= '2026-01-01'
GROUP BY regiao
HAVING SUM(valor) > 10000
ORDER BY total DESC;
A ordem em que o banco executa
FROM: escolhe a tabela.WHERE: filtra as linhas.GROUP BY: forma os grupos.HAVING: filtra os grupos.SELECT: monta as colunas do resultado.ORDER BY: ordena.
Entender essa ordem resolve a maior parte das dúvidas sobre o que pode ir em cada lugar.
Erros comuns
- Colocar no SELECT uma coluna que não está no GROUP BY nem dentro de uma função como
SUM. O banco não sabe qual valor mostrar para o grupo. - Usar HAVING para o que o WHERE resolve. Se o filtro é sobre uma linha (data, região), use
WHERE: fica mais rápido. - Esquecer que
COUNT(coluna)ignora valores vazios, enquantoCOUNT(*)conta todas as linhas.
Perguntas frequentes
Posso agrupar por mais de uma coluna?
Sim. GROUP BY regiao, mes gera uma linha para cada combinação de região e mês.
Posso usar HAVING sem GROUP BY?
Em geral ele só faz sentido junto com o agrupamento, porque filtra o resultado de funções como SUM e COUNT.
Essa pergunta cai em entrevista?
A diferença entre WHERE e HAVING é uma das perguntas clássicas de SQL em processos seletivos para analista.
Próximo passo
A melhor forma de fixar é praticar. Na plataforma da Educadados você treina por comando: há exercícios só de GROUP BY e só de HAVING, do iniciante ao avançado, com correção na hora. Conheça o curso de SQL.