Voltar para a lista de artigos Artigos
7 minutos de leitura

O que é GROUP BY em SQL?

GROUP BY é um grande recurso SQL que permite realizar cálculos poderosos sobre dados agrupados. Você quer aprender como obter insights poderosos a partir de seus dados? Você gostaria de saber o que GROUP BY faz e quando você deve utilizá-lo? Se sua resposta for sim, continue lendo. Neste artigo, você aprenderá exatamente isso.

Por que você precisa do GROUP BY

No mundo digitalizado de hoje - não importa em que negócio você esteja - as tabelas de banco de dados são normalmente enormes, com milhões de registros. Para se familiarizar com tais dados, não é suficiente saber como utilizar as declarações SELECT. Uma das primeiras coisas que você deve aprender ao lidar com grandes quantidades de dados é como usar a construção SQL GROUP BY. Este poderoso recurso permite que você agrupe seus dados por algum atributo comum, após o qual você pode realizar cálculos em cada um destes grupos separadamente.

Quando você precisa de um GROUP BY

Portanto, você pode usar GROUP BY quando quiser agrupar registros e depois fazer alguns cálculos sobre cada grupo e exibir os resultados. A próxima pergunta é quando - em que situações ou cenários de negócios - faz sentido usar a cláusula GROUP BY?

Bem, a SQL GROUP BY é amplamente utilizada em diferentes indústrias e áreas de negócios. Por exemplo, a SQL é amplamente utilizada em diferentes indústrias e áreas de negócios:

  • Em vendas, você pode usar GROUP BY para calcular o número total de produtos vendidos em um nível de produto ou categoria.
  • O RH pode pedir que você calcule o salário médio de cada departamento da empresa usando uma tabela que contém informações sobre os funcionários, seus salários e seus departamentos.
  • No setor bancário, o número total de clientes ativos vs. clientes não ativos pode ser calculado utilizando a construção GROUP BY.
  • Em saúde pública ou medicina, é possível calcular o número total de casos confirmados de COVID para cada país e província com GROUP BY.

Uma coisa é certa - há muitos cenários de negócios diferentes onde GROUP BY é útil. Não importa onde você trabalhe como analista SQL, você certamente se encontrará usando GROUP BY todos os dias.

Agora é hora de aprender como usar a cláusula GROUP BY. Vamos começar com sua sintaxe.

GROUP BY Sintaxe

A sintaxe do GROUP BY é mais fácil de explicar com um exemplo, então vamos começar dando uma olhada no movies tabela mostrada abaixo:

idtitledirectorproduction_year
1PsychoAlfred Hitchcock1960
3Sweet and LowdownWoody Allen1993
4Talk to HerPedro Almodovar2002
2Midnight in ParisWoody Allen2011
8The Skin I Live InPedro Almodovar2011

Como você pode ver, cada filme é representado por um registro na tabela. Para cada filme, a tabela contém informações sobre seu diretor e ano de produção.

Alguns filmes são feitos pelo mesmo diretor. Se você gostaria de exibir o número de filmes feitos por cada diretor, você poderia usar GROUP BY assim:

SELECT director,
      count(*) AS number_of_movies
FROM movies
GROUP BY director;

Aqui está uma breve explicação sobre o que está acontecendo nesta consulta:

  • Esta instrução SQL agrupa os registros pela coluna director. Isto é indicado pela palavra-chave GROUP BY seguida pelo nome da coluna pela qual os registros são agrupados (em nosso caso, a coluna é director).
  • A coluna de agrupamento também deve ser listada após a SELECT palavra-chave (ou seja, dentro do SELECT). Isto significa que os diretores serão exibidos na tela de saída e cálculos específicos serão feitos para cada grupo (para cada diretor) separadamente.
  • Há três grupos de registros porque temos três diretores diferentes em nossa tabela de filmes (Alfred Hitchcock, Woody Allen, e Pedro Almodovar).
  • A função COUNT(*) é executada em cada grupo. Ela contará todas as filas dentro de cada grupo.

A tabela resultante nos mostra o número total de filmes para cada diretor:

directornumber_of_movies
Alfred Hitchcock1
Woody Allen2
Pedro Almodovar2

Observe como as filas de resultados são colapsadas?-?cada grupo é exibido em uma fila. É por isso que a tabela resultante contém três filas em vez de cinco (o número de filas na tabela); há três grupos.

Como funciona o GROUP BY

Agora você sabe o que o motor SQL irá exibir como resultado de nosso GROUP BY. Mas como o GROUP BY realmente funciona? Olhe a animação abaixo:

GROUP BY

Como você pode ver nesta animação, o mecanismo SQL primeiro agrupa as linhas por uma chave definida - no nosso caso, a coluna do diretor. Os filmes de Alfred Hitchcock estão em um grupo, os filmes de Woody Allen em outro e Pedro Almodovar em um terceiro. Após o agrupamento, uma contagem é feita em cada grupo separadamente e o resultado é exibido. Neste caso, a função COUNT() conta o número total de filmes para cada diretor.

Talvez você tenha se deparado com a cláusula SQL ORDER BY e esteja inseguro sobre a diferença entre as filas de ordenação e de agrupamento. Se assim for, sugiro que você dê uma olhada na Diferença entre Pedido GROUP BY e Encomenda por Palavras Simples.

Cálculos Múltiplos em um GROUP BY

Em nosso exemplo anterior, contamos os registros (filmes) de cada diretor separadamente. Há muitas outras estatísticas que você pode usar em uma cláusula GROUP BY. Por exemplo, em vez de contar linhas individuais, você pode calcular o valor médio para cada grupo usando a função AVG() ou pode calcular totais usando SUM(). Você também pode usar as funções MIN() ou MAX() para recuperar os menores (min) ou maiores (max) valores de cada grupo. Chamamos tais funções de funções agregadas porque elas fazem cálculos sobre grupos de valores e retornam um único valor como resultado.

Vamos ter um exemplo rápido de utilização do GROUP BY com funções agregadas. Nesta consulta, você pode exibir o filme mais antigo/mais recente feito por cada diretor:

SELECT director,
      min(production_year) AS the_earliest_film_made,
      max(production_year) AS the_latest_film_made
FROM movies 
GROUP BY director;

Aqui estamos usando as funções MIN() e MAX() para recuperar as informações desejadas. Usamos duas funções? porque estamos recuperando duas estatísticas diferentes para cada grupo de registros. Isto é outra coisa boa de se saber sobre GROUP BY - você pode fazer cálculos diferentes em uma instrução SQL.

Aqui está o resultado:

directorthe_earliest_film_madethe_latest_film_made
Alfred Hitchcock19601960
Woody Allen19932011
Pedro Almodovar20022011

Observe que os valores mínimos e máximos de Alfred Hitchcock são iguais. Isto porque há apenas um de seus filmes em nossa tabela; assim, MIN() e MAX() retornam o mesmo valor. Outros diretores no movies tabela têm mais filmes em seu portfólio, portanto, têm valores diferentes.

Não temos espaço para mergulhar em funções agregadas aqui; você pode encontrar uma explicação detalhada sobre funções agregadas e seu uso com GROUP BY em nosso artigo A Beginner's Guide to SQL Aggregate Functions.

GROUP BY Múltiplas Colunas

No exemplo anterior, vimos que é possível fazer mais de um cálculo em uma declaração GROUP BY. Da mesma forma, também é possível agrupar as linhas com base em mais de uma coluna. Isto na verdade significa que cada grupo específico na saída é definido por mais de um valor de coluna.

Suponha que nossos movies A tabela também tem um atributo de gênero para cada um dos filmes:

idtitledirectorproduction_yeargenre
1PsychoAlfred Hitchcock1960thriller
3Sweet and LowdownWoody Allen1993comedy/drama
4Talk to HerPedro Almodovar2002romance/drama
2Midnight in ParisWoody Allen2011comedy/drama
8The Skin I Live InPedro Almodovar2011thriller/drama

Em vez de agrupar linhas por diretor, poderíamos agrupá-las por diretor e gênero para calcular o número de filmes de cada diretor em cada gênero:

SELECT director,
      genre,
      count(*) as number_of_movies 
FROM movies
GROUP BY director, genre;

Aqui está uma breve explicação da consulta acima:

  • Dentro do GROUP BY, temos duas colunas: diretor e gênero. Essas duas colunas também são definidas após o SELECT Lembre-se, você deve listar todas as colunas do GROUP BY dentro do SELECT.
  • Neste exemplo, cada grupo é definido por um diretor e um gênero. Isto significa que vamos distinguir os filmes de thriller/drama de Pedro Almodovar como um grupo e seu romance/drama como outro grupo. Assim, teremos quatro filas (não três) na produção:
directorgenrenumber_of_movies
Alfred Hitchcockthriller1
Woody Allencomedy/drama2
Pedro Almodovarromance/drama1
Pedro Almodovarthriller/drama1

th style="background-color:#37c591".

Legal, certo? A esta altura, você provavelmente entende que o GROUP BY é um recurso SQL muito poderoso e eficaz. Se você gostaria de ver mais exemplos do GROUP BY, sugiro o artigo Exemplos do SQL GROUP BY. Lá você encontrará 5 exemplos adicionais que o ajudarão a dominar GROUP BY.

Aprofunde seus conhecimentos sobre SQL GROUP BY

Esperamos que estes exemplos tenham mostrado como é fácil escrever uma cláusula SQL GROUP BY. Ela é realmente útil no dia-a-dia dos negócios, pois ajuda você a obter insights poderosos de dados em apenas algumas linhas de código.

Agora é a hora de você praticar. Sugiro que você comece com o curso SQL para Iniciantes em LearnSQL.com.br. Se você já passou pelos fundamentos e quer aprimorar suas habilidades, experimente nosso Curso de Práticas em SQL. Lembre-se, somente praticando você pode melhorar seus conhecimentos e avançar para o título de especialista em SQL.