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]
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
As funções comuns de agrupamento (agregação) incluem:
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:
Disciplina
e calcula a média das notas (AVG(Nota)
), renomeando o resultado como MediaNota
.Notas
.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:
Cidade
e conta quantos ClienteID
existem, renomeando o resultado como TotalClientes
.Clientes
.Cidade
, permitindo que a função COUNT()
conte o número de clientes em cada cidade.Com essa consulta, você obterá uma lista de cidades que têm mais de 5 clientes e quantos clientes existem em cada uma delas.