SQL/Agregação e Agrupamento/Funções de Agregação e GROUP BY
SQL⏱ ~2 min de leitura

Funções de Agregação e GROUP BY

COUNT, SUM, AVG, HAVING e PARTITION BY

Funções de agregação calculam um valor a partir de múltiplas linhas: COUNT() conta registros, SUM() soma valores, AVG() calcula média, MAX() e MIN() retornam o maior e menor valor.

GROUP BY agrupa linhas com o mesmo valor em uma coluna e aplica as funções de agregação a cada grupo. Toda coluna no SELECT que não é uma função de agregação deve aparecer no GROUP BY.

HAVING é o filtro para grupos — funciona como WHERE, mas é aplicado após o agrupamento. Window functions (funções janela) como AVG() OVER (PARTITION BY ...) calculam agregações por grupo sem colapsar as linhas individuais.

Exemplo.java
-- Funções de agregação básicas
SELECT
    COUNT(*)           AS total_pedidos,
    COUNT(DISTINCT cliente_id) AS clientes_únicos,
    SUM(valor)         AS receita_total,
    AVG(valor)         AS ticket_médio,
    MAX(valor)         AS maior_pedido,
    MIN(valor)         AS menor_pedido
FROM pedidos;

-- GROUP BY
SELECT
    departamento,
    COUNT(*) AS funcionarios,
    AVG(salario) AS media_salarial
FROM funcionarios
GROUP BY departamento
ORDER BY media_salarial DESC;

-- HAVING — filtrar grupos
SELECT
    cliente_id,
    COUNT(*) AS total_pedidos
FROM pedidos
GROUP BY cliente_id
HAVING COUNT(*) >= 5     -- só clientes com 5+ pedidos
ORDER BY total_pedidos DESC;

-- Window function — mantém linhas individuais
SELECT
    nome,
    departamento,
    salario,
    AVG(salario) OVER (PARTITION BY departamento) AS media_depto,
    salario - AVG(salario) OVER (PARTITION BY departamento) AS diff_media
FROM funcionarios;

-- ROW_NUMBER, RANK
SELECT
    nome, salario,
    ROW_NUMBER() OVER (ORDER BY salario DESC) AS ranking,
    RANK() OVER (PARTITION BY depto ORDER BY salario DESC) AS rank_depto
FROM funcionarios;
💡 Dica pro

WHERE filtra antes do GROUP BY (mais eficiente). HAVING filtra depois — use WHERE quando possível e HAVING apenas para condições envolvendo agregações.

Recompensa+40 XP+exercícios