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]

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

[editar | editar código-fonte]

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

[editar | editar código-fonte]

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:

  1. SELECT Disciplina, AVG(Nota) AS MediaNota: Seleciona a coluna Disciplina e calcula a média das notas (AVG(Nota)), renomeando o resultado como MediaNota.
  2. FROM Notas: Especifica que os dados estão vindo da tabela Notas.
  3. 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:

  1. SELECT Cidade, COUNT(ClienteID) AS TotalClientes: Seleciona a coluna Cidade e conta quantos ClienteID existem, renomeando o resultado como TotalClientes.
  2. FROM Clientes: Especifica que os dados estão vindo da tabela Clientes.
  3. GROUP BY Cidade: Agrupa os resultados por Cidade, permitindo que a função COUNT() conte o número de clientes em cada cidade.
  4. 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

  1. «SQL GROUP BY Statement». www.w3schools.com. Consultado em 18 de setembro de 2020 
  2. shkale-msft. «GROUP BY (Transact-SQL) - SQL Server». docs.microsoft.com (em inglês). Consultado em 18 de setembro de 2020 
  3. «SQL Grouping and Aggregation». databaselecture.com (em inglês). Consultado em 9 de dezembro de 2020 
  4. «Aggregation functions in GROUP BY SQL» (em inglês). Consultado em 29 de outubro de 2024 

Ligações externas

[editar | editar código-fonte]