DevPath · Aprenda a programar ESPTEN

Agregações: GROUP BY e HAVING

Agrupar com GROUP BY

Um agregado por grupo

Quase nunca queremos um único número para a tabela inteira, mas sim um por categoria, por cliente, por mês.... É para isso que serve o GROUP BY: divide as linhas em grupos conforme os valores de uma coluna e aplica a função agregada a cada grupo separadamente.

SELECT categoria, AVG(preco) AS preco_medio
FROM produtos
GROUP BY categoria;

Isso retorna uma linha por cada categoria distinta, com o preço médio dos produtos dessa categoria.

O que pode ir no SELECT

Esta é a regra de ouro: quando há GROUP BY, no SELECT só podem aparecer:

  1. As colunas pelas quais você agrupa (as que estão no GROUP BY).
  2. Funções agregadas (COUNT, SUM, AVG...).

Colocar uma coluna "normal" que não esteja no GROUP BY não faz sentido: o grupo tem muitas linhas e esse campo pode ter valores diferentes em cada uma.

-- Produtos e estoque total por categoria, do maior ao menor estoque
SELECT categoria, SUM(estoque) AS estoque_total
FROM produtos
GROUP BY categoria
ORDER BY estoque_total DESC;

ORDER BY é aplicado depois de agrupar, então você pode ordenar pelo próprio agregado (pelo seu alias ou repetindo a função).

Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
← Funções agregadasFiltrar grupos com HAVING →