🧠 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áusula GROUP 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 por ROLLUP ou CUBE.

  • Evite usar colunas com tipos como CLOB, XML, BLOB em expressões de agrupamento.

  • GROUP BY pode ser combinado com JOIN, 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.