Agrupando por várias colunas e expressões
Use chaves de agrupamento compostas e agrupe por valores calculados.
Agrupando por várias colunas e expressões é uma aula grátis de SQL Interview Prep no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Interview Prep inclui 4 aulas no total.
Além de uma Única Chave de Agrupamento
Relatórios reais raramente agrupam por uma única coluna. Entrevistadores passam de “vendas por região” para “vendas por região por mês” para verificar se você entende chaves de agrupamento compostas.
A regra se estende de forma simples: listar mais colunas em GROUP BY cria uma linha para cada combinação distinta dessas colunas.
O Que Várias Colunas Significam
Quando você escreve GROUP BY region, product, a chave do grupo é o par (region, product). Cada par exclusivo se torna uma linha da saída.
- 5 regiões e 4 produtos produzem no máximo 20 grupos.
- Combinações que nunca ocorrem não produzem nenhuma linha.
- A ordem das colunas em GROUP BY não altera o conjunto de resultados, apenas o plano em alguns casos.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY region, product;Ainda Obedeça à Regra de SELECT
A restrição fundamental não muda. Toda coluna de SELECT que não seja agregada deve aparecer em GROUP BY. Com chaves compostas, basta listar todas elas.
Esquecer uma coluna em um grupo com várias chaves é o deslize mais comum sob a pressão de uma entrevista. Faça a lista de GROUP BY corresponder exatamente às colunas não agregadas de SELECT.
-- Both region and product appear in GROUP BY
SELECT region, product,
COUNT(*) AS orders,
AVG(amount) AS avg_amount
FROM sales
GROUP BY region, product;Agrupamento por uma Expressão
Você pode agrupar por um valor calculado, não apenas por uma coluna bruta. Um pedido frequente é agrupar as vendas por mês, o que significa agrupar por uma data truncada ou extraída.
A expressão em GROUP BY deve corresponder à expressão em SELECT. O mecanismo agrupa pelo resultado calculado.
SELECT DATE_TRUNC('month', order_date) AS month,
SUM(amount) AS monthly_total
FROM sales
GROUP BY DATE_TRUNC('month', order_date);Agrupamento com Faixas de CASE
Um padrão poderoso: agrupe por uma expressão de CASE para criar faixas personalizadas. É assim que você produz resumos de “pedido pequeno / médio / grande” sem uma tabela de consulta.
Entrevistadores gostam disso porque testa simultaneamente a lógica de CASE e o agrupamento por um valor derivado.
SELECT CASE
WHEN amount < 50 THEN 'small'
WHEN amount < 200 THEN 'medium'
ELSE 'large'
END AS bucket,
COUNT(*) AS orders
FROM sales
GROUP BY CASE
WHEN amount < 50 THEN 'small'
WHEN amount < 200 THEN 'medium'
ELSE 'large'
END;Agrupamento por Posição da Coluna
Muitos dialetos permitem agrupar pela posição ordinal: GROUP BY 1, 2 significa a primeira e a segunda colunas de SELECT. É conciso, mas frágil.
Entrevistadores podem aceitar essa forma, mas observe o risco: reordenar a lista de SELECT altera o agrupamento silenciosamente. Prefira expressões explícitas no código de produção.
-- 1 = month expression, 2 = region
SELECT DATE_TRUNC('month', order_date) AS month,
region, SUM(amount)
FROM sales
GROUP BY 1, 2;NULLs Formam seu Próprio Grupo
Uma armadilha no tratamento de NULL dentro do agrupamento: quando uma coluna de agrupamento contém NULLs, todas as linhas com NULL são reunidas em um único grupo.
Isso difere das comparações de igualdade, nas quais NULL nunca é igual a NULL. Para fins de agrupamento, NULLs são tratados como “iguais” e formam uma única faixa. Entrevistadores adoram essa aparente contradição.
-- Rows with region IS NULL all land in one group
SELECT region, COUNT(*) AS orders
FROM sales
GROUP BY region;GROUPING SETS para Vários Níveis
Para produzir vários níveis de granularidade de agrupamento em uma única consulta, use GROUPING SETS. Ele calcula cada conjunto de chaves listado e une os resultados.
Isso demonstra conhecimento de nível intermediário a avançado: em vez de três consultas separadas mais UNION, uma instrução retorna juntas as vendas por região, por produto e os totais gerais.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS ((region), (product), ());ROLLUP e CUBE
ROLLUP e CUBE são formas abreviadas de conjuntos de agrupamento comuns. ROLLUP(region, product) fornece região+produto, subtotais por região e um total geral, sendo ideal para relatórios hierárquicos.
CUBE gera todas as combinações das colunas listadas. Conhecer esses recursos diferencia um candidato que já criou consultas reais de relatórios.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP (region, product);Exemplo Resolvido: Relatório Mensal por Região
Combine as ideias: total e média de vendas por região e por mês, somente para pedidos concluídos, ordenados para facilitar a leitura.
WHERE restringe as linhas primeiro, a chave composta agrupa por região e pela expressão do mês, e ORDER BY organiza a saída. Esta é uma resposta completa típica de uma entrevista para analista.
SELECT region,
DATE_TRUNC('month', order_date) AS month,
SUM(amount) AS total,
AVG(amount) AS avg_order
FROM sales
WHERE status = 'completed'
GROUP BY region, DATE_TRUNC('month', order_date)
ORDER BY region, month;Como Raciocinar em Voz Alta
Para qualquer pergunta sobre agrupamento composto, declare a chave explicitamente: “Estou agrupando pela combinação de X e Y, portanto obtenho uma linha por par distinto (X, Y).”
Depois, confirme que cada coluna de SELECT não agregada está nessa chave e mencione que NULLs são reunidos em um único grupo. Essa explicação metódica é valorizada em entrevistas de nível intermediário.
Verificação rápida
Raciocine sobre chaves de agrupamento compostas.
Recapitulação
Chaves compostas: listar várias colunas produz uma linha por combinação distinta; toda coluna de SELECT não agregada deve estar na chave.
- Você pode agrupar por expressões, faixas de CASE ou posições ordinais; as posições são frágeis.
- NULLs em uma coluna de agrupamento são reunidos em um único grupo.
GROUPING SETS,ROLLUPeCUBEproduzem vários níveis de agrupamento em uma única consulta.- Aplique os filtros de linhas em WHERE antes do agrupamento.
Perguntas Frequentes
A aula “Agrupando por várias colunas e expressões” é grátis?
Sim — o texto completo de “Agrupando por várias colunas e expressões” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Interview Prep, atualize para CoddyKit PRO. O curso de SQL Interview Prep inclui 4 aulas no total.
O que vou aprender em “Agrupando por várias colunas e expressões”?
Use chaves de agrupamento compostas e agrupe por valores calculados. Você pratica SQL Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Interview Prep?
Nenhuma experiência prévia é necessária. SQL Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Agrupando por várias colunas e expressões”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Interview Prep?
Sim. Cada aula de SQL Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- A regra de GROUP BY para colunas SELECT
- HAVING versus WHERE
- Agrupando por várias colunas e expressões
- Contando e filtrando grupos