# Agrupamento e agregação (álgebra relacional)

O operador de agrupamento γ (gama) faz parte do conjunto de operadores estendidos da Álgebra relacional. É utilizado para representar operações a serem aplicadas sobre conjuntos de tuplas de uma relação. O operador de agrupamento reúne as tuplas em grupos sobre os quais podem ser aplicadas funções agregadas. As funções de agregação mais comuns são SOMA (SUM), MÉDIA(AVG), MÁXIMO(MAX), MÍNIMO(MIN) e CONTAR(COUNT).

## Sintaxe

Uma expressão de agrupamento é formada de um conjunto de colunas agrupadoras, um conjunto de colunas projetadas e uma relação, no seguinte formato:

### <colunas agrupadoras> γ <colunas projetadas> (<Relação>)

Em que:
<colunas agrupadoras> é um conjunto com nenhuma ou mais colunas a serem utilizadas para agrupamento
<colunas projetadas> é um conjunto com nenhuma ou mais colunas que serão retornadas pela expressão. Nesta lista, as colunas podem ser envolvidas por funções a serem aplicadas às mesmas. As colunas e as funções projetadas podem também ser renomeadas, através da adição de uma seta seguida do novo nome, fazendo com que a relação resultante tenha como nome de coluna o novo nome atribuído.
<Relação> é uma relação da álgebra relacional que possui as colunas utilizadas na lista de colunas projetadas e na lista de funções agregadoras.

## Exemplos

Considerando a relação: R1 (C1, C2,C3), o agrupamento pode ser aplicado da seguinte maneira:

### C1 γ C1, SUM(C2) (R1)

Expressão a ser resolvida conforme os passos a seguir:
As tuplas da relação R1 são particionadas em grupos, conforme o valor de C1. Ou seja, as tuplas que possuírem o mesmo valor em C1 serão reunidas em um grupo. Caso não exista coluna informada na lista de colunas agrupadoras, apenas um grupo com todas as tuplas da relação é formado.
Para cada grupo, uma nova tupla é produzida. Caso nenhuma coluna projetada ou função tenha sido informada, a tupla será composta apenas pelos valores resultantes do agrupamento. Caso contrário, a nova tupla será composta por:
As colunas projetadas.
A aplicação das funções agrupadoras ao grupo. No exemplo, para cada grupo, a coluna C2 será somada, produzindo o valor da nova tupla.
Outros exemplos:
C3 γ (R1)
Produz uma nova relação agrupando os valores da coluna C3.
γ MAX(C3) (R1)
Produz uma nova relação com apenas uma tupla, contendo o maior valor da coluna C3.
C1 γ C1, SUM(C3)→SOMA (R1)
Produz uma nova relação a partir do agrupamento das tuplas a partir da coluna C1, contento a coluna C1 e o resultado da soma da coluna C3 renomeado para SOMA.

## Exemplos com tabelas

Considerando a tabela FUNCIONARIO, com a seguinte estrutura:
| Coluna | Tipo de dado |
| NOME | texto |
| SETOR | texto |
| ANO_CONTRATACAO | números inteiros |
| SALARIO | números reais |
Considerando também que esta tabela possui os seguintes dados:
| NOME | SETOR | ANO_CONTRATACAO | SALARIO |
| Ana | Recepção | 2000 | 900,00 |
| Pedro | Administração | 1999 | 2000,00 |
| Maria | Administração | 2001 | 1500,00 |
| Tiago | Linha de produção | 2000 | 1700,00 |
Diversas informações podem ser extraídas destes dados através da aplicação de funções de agregação. Por exemplo:
Para contar quantos funcionários há em cada setor, a seguinte expressão pode ser aplicada:

### SETOR γ SETOR, count(NOME)

Produzindo como saída:
| SETOR | count(NOME) |
| Recepção | 1 |
| Administração | 2 |
| Linha de produção | 1 |
Para obter o maior salário e o nome do funcionário de maior salário, a seguinte expressão pode ser aplicada:

### γ NOME, max(SALARIO)

Produzindo como saída:
| NOME | max(SALARIO) |
| Pedro | 2000,00 |
Para obter a média de salários por setor e renomeando o resultado da função para MEDIA_SALARIO, a seguinte expressão pode ser aplicada:

### SETOR γ SETOR, avg(SALARIO) → MEDIA_SALARIO

Produzindo como saída:
| SETOR | MEDIA_SALARIO |
| Recepção | 900,00 |
| Administração | 1750,00 |
| Linha de Produção | 1700,00 |