🧠 Explicação
A cláusula GROUP BY é usada para agrupar os dados de uma consulta com base em uma ou mais colunas. Ela permite executar funções de agregação (como SUM, AVG, COUNT, MAX, MIN) sobre grupos de linhas que compartilham valores em comum.
🔧 Usos mais comuns
-
Obter totais por categoria (ex: total de vendas por cliente).
-
Gerar relatórios resumidos com dados agrupados.
-
Trabalhar em conjunto com
HAVINGpara filtrar grupos.
🧾 Sintaxe básica
SELECT coluna_agrupada, função_agregada(coluna)
FROM nome_tabela
GROUP BY coluna_agrupada;
💻 Exemplo prático
SELECT depnome, SUM(deporca)
FROM dept
GROUP BY depnome;
Esse exemplo mostra o orçamento total por departamento.
📌 Regras
-
Toda coluna que não estiver dentro de uma função agregada na cláusula
SELECTdeve obrigatoriamente estar na cláusulaGROUP BY. -
Linhas com valores
NULLna coluna de agrupamento são tratadas como um único grupo.
🔎 Cláusula HAVING
Permite aplicar filtros após o agrupamento.
SELECT depnome, SUM(deporca)
FROM dept
GROUP BY depnome
HAVING SUM(deporca) > 100000;
🔀 ORDER BY com GROUP BY
Para ordenar os resultados após o agrupamento:
SELECT empserv, AVG(empsala)
FROM emp
GROUP BY empserv
ORDER BY AVG(empsala) DESC;
🔁 ROLLUP
Gera totais parciais e um total geral:
SELECT depnome, empserv, SUM(empsala)
FROM emp
GROUP BY ROLLUP(depnome, empserv);
🔲 CUBE
Gera todas as combinações possíveis entre as colunas de agrupamento:
SELECT empserv, depnome, SUM(empsala)
FROM emp
GROUP BY CUBE(empserv, depnome);
📦 GROUPING SETS
Permite definir exatamente quais combinações de agrupamento devem ser retornadas:
SELECT empserv, depnome, SUM(empsala)
FROM emp
GROUP BY GROUPING SETS ((empserv), (depnome));
📎 Dicas
-
Use
GROUPING()para identificar se a linha foi gerada porROLLUPouCUBE. -
Evite usar colunas com tipos como
CLOB,XML,BLOBem expressões de agrupamento. -
GROUP BYpode ser combinado comJOIN,WHERE,ORDER BY,HAVINGe subconsultas.
✅ Conclusão
A cláusula GROUP BY é essencial para sumarizar dados em SQL. Combinada com agregações e extensões como ROLLUP, CUBE e GROUPING SETS, ela oferece flexibilidade poderosa para relatórios e análises em ambientes DB2.