40. GROUP BY

Escrito por Uianes Luiz Rockenbach Biondo.
Última atualização em 04 out. 2023

A instrução GROUP BY é usada para agrupar os resultados de funções de agregação, como COUNT(), MAX(), MIN(), SUM() e AVG(). Imagine que você queira exibir a contagem de alunos por cidade; isso sempre foi possível, porém, envolveria utilizar a opção de COUNT para cada cidade registrada. Com o GROUP BY, é possível simplificar o processo. Sintaxe:

SELECT coluna1, coluna2, ...
FROM nomeTabela
WHERE condição
GROUP BY nomeColuna
ORDER BY nomeColuna;

Exemplo

Tabela Alunos

id_aluno nome_aluno cidade_aluno
1 Uianes Santo Augusto
2 Maria Três Passos
3 José Santo Augusto
4 Antônio Santo Augusto
5 João Tenente Portela
SELECT COUNT(cidade_aluno), cidade_aluno
FROM Alunos
GROUP BY cidade_aluno;

Resultado:

COUNT(nome_cidade) nome_cidade
3 Santo Augusto
1 Três Passos
1 Tenente Portela

É possível utilizar a instrução ORDER BY em conjunto com GROUP BY, porém, a ORDER BY deve aparecer por último. Veja o exemplo anterior, mas com o resultado em ordem alfabética ascendente (crescente).

SELECT COUNT(cidade_aluno), cidade_aluno
FROM Alunos
GROUP BY cidade_aluno
ORDER BY cidade_aluno ASC;

Resultado:

COUNT(nome_cidade) nome_cidade
3 Santo Augusto
1 Tenente Portela
1 Três Passos

Utilização do GROUP BY com JOIN:

Observe as tabelas.

Tabela Alunos

id_aluno nome_aluno cidade_aluno
1 Uianes Santo Augusto
2 Maria Três Passos
3 José Santo Augusto
4 Antônio Santo Augusto
5 João Tenente Portela

Tabela Nota

nota_id id_aluno disciplina_nome nota
1 1 Programação WEB 10
2 5 História 9
3 2 Banco de Dados 7
4 5 Programação WEB 6

Comando:

SELECT alunos.nome_aluno, COUNT(alunos.id_aluno) AS "Quantidade de notas"
FROM Alunos
LEFT JOIN Nota
ON alunos.id_aluno = alunos.id_nota
GROUP BY alunos.nome_aluno;

Resultado:

nome_aluno Quantidade de notas
Antônio 0
João 2
José 0
Maria 1
Uianes 1