🧠 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
HAVING
para 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
SELECT
deve obrigatoriamente estar na cláusulaGROUP BY
. -
Linhas com valores
NULL
na 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 porROLLUP
ouCUBE
. -
Evite usar colunas com tipos como
CLOB
,XML
,BLOB
em expressões de agrupamento. -
GROUP BY
pode ser combinado comJOIN
,WHERE
,ORDER BY
,HAVING
e 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.