Group by (SQL)
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 comoMediaNota
. - 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çãoAVG()
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 quantosClienteID
existem, renomeando o resultado comoTotalClientes
. - FROM Clientes: Especifica que os dados estão vindo da tabela
Clientes
. - GROUP BY Cidade: Agrupa os resultados por
Cidade
, permitindo que a funçãoCOUNT()
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
- ↑ «SQL GROUP BY Statement». www.w3schools.com. Consultado em 18 de setembro de 2020
- ↑ shkale-msft. «GROUP BY (Transact-SQL) - SQL Server». docs.microsoft.com (em inglês). Consultado em 18 de setembro de 2020
- ↑ «SQL Grouping and Aggregation». databaselecture.com (em inglês). Consultado em 9 de dezembro de 2020
- ↑ «Aggregation functions in GROUP BY SQL» (em inglês). Consultado em 29 de outubro de 2024