Bê-á-bá do SQL: Agrupando valores com o GROUP BY

Bê-á-bá do SQL: Agrupando valores com o GROUP BY

Inscreva-se

Abordamos dados e análises dentro das empresas.

Receba novos artigos por e-mail


Compartilhe

Material de apoio:
1. Antes de iniciar esse tutorial, acesse a introdução da série de tutoriais clicando aqui, siga o passo a passo para usar a nossa plataforma interativa de SQL e pratique em tempo real
2. Participe do nosso canal do slack, onde você poderá tirar dúvidas sobre os tutoriais e também acessar conteúdo exclusivo do universo de dados, clicando aqui

Confira também os posts anteriores da série:
1. Introdução
2. Estrutura do SELECT
3. Filtrando valores com o WHERE

O comando GROUP BY é usado para agregar valores com base em suas semelhanças. Ele geralmente é usado junto de funções de agregação no SELECT, tais como:

COUNTContagem
SUMSoma
AVGMédia
MINMínimo
MAXMáximo

A sintaxe básica do GROUP BY é a seguinte:

SELECT coluna1, SUM(coluna2)
FROM nome_tabela
WHERE coluna1 = condicao
GROUP BY coluna1 

No código acima estamos fazendo uma soma da coluna2 e agrupando essa soma pela coluna1. Importante: Operações de agregação tais como as que expomos na tabela acima, não podem ser agrupadas no GROUP BY. Para exemplificar, vamos considerar a tabela “pessoas” da nossa base de dados de exemplo:

O atributo alt desta imagem está vazio. O nome do arquivo é image-1.png

Usando o GROUP BY com COUNT

SELECT uf, COUNT(id)
FROM pessoas
GROUP BY uf

No código acima estamos contando quantos registros existem na tabela “pessoas” agrupados pelo campo uf:

Usando o GROUP BY com SUM

SELECT uf, SUM(idade)
FROM pessoas
GROUP BY uf

Já no exemplo acima, estamos somando as idades de todas as pessoas, agrupando-as por UF:

Usando o GROUP BY com AVG

SELECT uf, AVG(idade)
FROM pessoas
GROUP BY uf

Já aqui estamos tirando a média da idade das pessoas, agrupadas por uf:

Usando o GROUP BY com MIN e MAX

SELECT uf, MIN(idade), MAX(idade)
FROM pessoas
GROUP BY uf

Já neste exemplo, estamos extraindo a idade mínima e a máxima das pessoas que compartilham o mesmo UF:

Agrupando mais de uma coluna

É possível agrupar mais de uma coluna no GROUP BY, inclusive com operações de agregação diferentes, como mostra o exemplo abaixo:

SELECT uf, sexo, avg(idade) AS media_idade, count(id) AS total_pessoas
FROM pessoas
GROUP BY uf, sexo

Neste caso estamos extraindo a média de idade e contando quantas pessoas existem em cada grupo de UF e sexo, o resultado terá 1 linha para cada grupo composto. Por exemplo, no UF de valor BA existem pessoas do sexo feminino e masculino, portanto o estado fará parte de dois grupos: BA + Feminino e BA + Masculino:

Usando o HAVING para filtrar resultados após o GROUP BY

A cláusula HAVING é parecida com a cláusula WHERE, a diferença é que o HAVING é usado para filtrar valores após o GROUP BY. Para exemplificar:

SELECT uf, COUNT(id)
FROM pessoas
WHERE sexo = 'Masculino'
GROUP BY uf

No código acima estamos contando a quantidade de pessoas por UF, cujo sexo seja masculino:

Já no código abaixo, ao acrescentar o HAVING, estamos eliminando desse resultado todas as linhas cujo resultado do COUNT seja menor que 2 pessoas:

SELECT uf, COUNT(id)
FROM pessoas
WHERE sexo = 'Masculino'
GROUP BY uf
HAVING COUNT(*) >= 2

Como mostra a tabela de resultado acima, não aparecem no resultado todos os estados que tenham menos que duas pessoas.

Não deixe de conferir os post anteriores da nossa série de tutoriais, e fique de olho no nosso blog para acompanhar os próximos!

E para testar a plataforma Kondado gratuitamente por 14 dias, basta clicar no link abaixo:

Publicado em 2020-11-11