# 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.
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.

## Exemplos

Retorna uma lista de IDs de departamentos junto com a soma de suas vendas na data de 1º de janeiro de 2000.
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?":

## 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:
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.
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;
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.
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.