Uma instrução GROUP BY
em SQL especifica que uma instrução SQL SELECT
particiona linhas de resultados em grupos, com base em seus valores em uma ou várias colunas. Normalmente, o agrupamento é usado para aplicar algum tipo de função agregada para cada grupo.[1][2]
O resultado de uma consulta usando uma instrução GROUP BY
contém uma linha para cada grupo. Isso implica restrições nas colunas que podem aparecer na cláusula SELECT
associada. Como regra geral, a cláusula SELECT
só pode conter colunas com um valor exclusivo por grupo. Isso inclui colunas que aparecem na cláusula GROUP BY
, bem como agregados que resultam em um valor por grupo.[3]
Exemplos
Retorna uma lista de IDs de departamentos junto com a soma de suas vendas na data de 1º de janeiro de 2000.
SELECT DeptID, SUM(SaleAmount) FROM Sales
WHERE SaleDate = '01-Jan-2000'
GROUP BY DeptID
No exemplo a seguir, pode-se perguntar "Quantas unidades foram vendidas em cada região para cada data de envio? ":
Sum_of_Units
|
Ship_Date
|
Region ▼
|
2005-01-31
|
2005-02-28
|
2005-03-31
|
2005-04-30
|
2005-05-31
|
2005-06-30
|
Leste
|
66
|
80
|
102
|
116
|
127
|
125
|
Norte
|
96
|
117
|
138
|
151
|
154
|
156
|
Sul
|
123
|
141
|
157
|
178
|
191
|
202
|
Oeste
|
78
|
97
|
117
|
136
|
150
|
157
|
(em branco)
|
|
|
|
|
|
|
Total geral
|
363
|
435
|
514
|
581
|
622
|
640
|
O código a seguir retorna os dados da tabela dinâmica acima, que responde à pergunta "Quantas unidades foram vendidas em cada região para cada data de envio?":
SELECT Region, Ship_Date, SUM(Units) AS Sum_of_Units
FROM FlatData
GROUP BY Region, Ship_Date
Agrupamentos comuns
As funções comuns de agrupamento (agregação) incluem:
- COUNT(expressão) - Quantidade de registros correspondentes (por grupo)
- SUM(expressão) - Soma do valor dado (por grupo)
- MIN(expressão) - Mínimo do valor fornecido (por grupo)
- MAX (expressão) - Máximo do valor fornecido (por grupo)
- AVG(expressão) - Média do valor fornecido (por grupo)
Exemplos práticos com diferentes tipos de agrupamentos
Um exemplo de como usar GROUP BY
em SQL com a função AVG()
. Suponha que você tenha uma tabela chamada Notas
que contém as colunas Aluno
, Disciplina
e Nota
. Se você quiser calcular a média das notas por disciplina, a consulta seria assim:
SELECT Disciplina, AVG(Nota) AS MediaNota
FROM Notas
GROUP BY Disciplina;
Nesse exemplo, a consulta faz o seguinte:
- SELECT Disciplina, AVG(Nota) AS MediaNota: Seleciona a coluna
Disciplina
e calcula a média das notas (AVG(Nota)
), renomeando o resultado como MediaNota
.
- FROM Notas: Especifica que os dados estão vindo da tabela
Notas
.
- GROUP BY Disciplina: Agrupa os resultados pela coluna
Disciplina
, o que permite que a função AVG()
calcule a média das notas para cada disciplina. [4]
Assim, você obterá uma lista de disciplinas e a média das notas dos alunos em cada uma delas.
Um exemplo de como usar o GROUP BY
junto com a função MAX()
em SQL. Suponha que você tenha uma tabela chamada Vendas
que contém as colunas Vendedor
, Produto
e Valor
. Se você quiser encontrar o maior valor de venda por vendedor, você poderia usar a seguinte consulta:
SELECT Vendedor, MAX(Valor) AS MaximoValor FROM Vendas GROUP BY Vendedor;
SELECT Vendedor, MAX(Valor) AS MaximoValor
FROM Vendas
GROUP BY Vendedor;
Um exemplo de como usar GROUP BY
em SQL junto com HAVING
e COUNT()
. Suponha que você tenha uma tabela chamada Clientes
com as colunas Cidade
e ClienteID
, e você deseja contar quantos clientes existem em cada cidade, mas apenas para cidades que têm mais de 5 clientes.
SELECT Cidade, COUNT(ClienteID) AS TotalClientes
FROM Clientes
GROUP BY Cidade
HAVING COUNT(ClienteID) > 5;
Nesse exemplo, a consulta faz o seguinte:
- SELECT Cidade, COUNT(ClienteID) AS TotalClientes: Seleciona a coluna
Cidade
e conta quantos ClienteID
existem, renomeando o resultado como TotalClientes
.
- FROM Clientes: Especifica que os dados estão vindo da tabela
Clientes
.
- GROUP BY Cidade: Agrupa os resultados por
Cidade
, permitindo que a função COUNT()
conte o número de clientes em cada cidade.
- HAVING COUNT(ClienteID) > 5: Filtra os resultados para incluir apenas aquelas cidades onde o número de clientes é maior que 5.
Com essa consulta, você obterá uma lista de cidades que têm mais de 5 clientes e quantos clientes existem em cada uma delas.
Referências
Ligações externas