40. GROUP BY
Escrito por Uianes Luiz Rockenbach Biondo.
Última atualização em 04 out. 2023
Ú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çãoGROUP 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_alunoORDER 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 NotaON alunos.id_aluno = alunos.id_notaGROUP BY alunos.nome_aluno;Resultado:
| nome_aluno | Quantidade de notas |
| Antônio | 0 |
| João | 2 |
| José | 0 |
| Maria | 1 |
| Uianes | 1 |