Trabalhando com funções de agregação

Quando desejamos realizar cálculos matemáticos para resolver problemas no nosso cotidiano, utilizamos operações básicas. Por exemplo: para somar valores, usamos a adição; para obter a diferença, a subtração.
Na linguagem SQL não é diferente. Nela é possível utilizar uma série de funções nativas da linguagem para trabalhar com os vários tipos de dados que serão armazenados em um banco de dados. Com essas funções podemos agrupar valores, realizar contas, criar medidas e identificar o maior e o menor valor de um conjunto.
As funções de agregação executam cálculos aritméticos de um conjunto de valores em uma coluna do banco de dados e retornam um único valor como resultado. Existem cinco funções de agregação que são utilizadas por todos os bancos de dados e executam agrupamentos diferentes nos conjuntos de dados. Essas funções são listadas abaixo e retornam, respectivamente:
- COUNT: o total de linhas.
- SUM: a soma total.
- MAX: o valor máximo.
- MIN: o valor mínimo.
- AVG: a média aritmética.
Neste artigo, vamos demonstrar como utilizar cada função e como os bancos de dados SQL Server, MySQL, PostgreSQL e Oracle, trabalham com as funções de agregação.
Como utilizar as funções de agregação?
Vamos observar o seguinte exemplo: em um banco de dados, existe a tabela de produtos que armazena as informações de ID (código), Descrição, Embalagem, Preço e Sabor:
ID | Descrição | Embalagem | Preço | Sabor |
---|---|---|---|---|
1 | Frescor do Verão - Uva | Garrafa | 8.50 | Uva |
2 | Linha Refrescante - Laranja | PET | 10.00 | Laranja |
3 | Festival de Sabores - Maracujá | Garrafa | 9.50 | Maracujá |
4 | Frescor do Verão - Laranja | Lata | 5.00 | Laranja |
5 | Festival de Sabores - Maracujá | Lata | 6.00 | Maracujá |
6 | Linha Refrescante - Manga | PET | 9.00 | Maracujá |
- COUNT
SELECT embalagem, COUNT(*) as contagem FROM tabela_de_produtos GROUP BY embalagem;
Neste comando será exibida a contagem das linhas da tabela de produtos por embalagem:

- AVG
SELECT embalagem, AVG(preço) as média FROM tabela_de_produtos GROUP BY embalagem;
Este comando retorna o valor da média aritmética do campo preço por embalagem:

- MAX e MIN
SELECT embalagem, MAX(preço) as Máximo, MIN(preço) as Mínimo FROM tabela_de_produtos GROUP BY embalagem;
O comando mostra o valor máximo e o valor mínimo do campo preço por embalagem:

- SUM
SELECT embalagem, SUM(preço) as Soma FROM tabela_de_produtos GROUP BY embalagem;
O comando SUM retorna a soma dos valores do campo preço por embalagem:


Bancos de dados
Mesmo sendo uma função nativa da linguagem SQL, os bancos de dados internamente trabalham de formas diferentes com as funções de agregação. Em SQL Server, Oracle e PostgreSQL, normalmente precisamos informar a cláusula group by
que é utilizada para agrupar registros semelhantes de uma tabela em um ou mais campos.
SELECT embalagem , AVG([preço]) as Média FROM [tabela de produtos] GROUP BY embalagem;
Quando informamos apenas a função de agregação, não é necessário utilizar a cláusula group by
no comando:
SELECT SUM([preço]) as Soma FROM [tabela de produtos];
Podemos também aplicar a cláusula group by
sem usar uma função de agregação na consulta:
SELECT embalagem FROM [tabela de produtos] GROUP BY embalagem;
Porém, não é permitido realizar consultas quando:
- a lista de seleção esteja com um campo diferente do informado na cláusula
group by
.
SELECT [preço] FROM [tabela de produtos] GROUP BY embalagem;
- os campos listados na seleção, que não estão em uma função de agregação, não são informadas na cláusula
group by
:
SELECT embalagem, descrição, AVG([preço]) FROM [tabela de produtos] GROUP BY embalagem ;
- se utiliza uma função de agregação e campos listados na seleção quando estes não estão na função de agregação e não usam uma cláusula
group by
:
SELECT embalagem, AVG([preço]) FROM [tabela de produtos];
Ao executar consultas no MySQL utilizando funções de agregação, normalmente utilizamos a cláusula group by
. Assim como nos outros bancos de dados, existem algumas diferenças na execução das consultas.
No MySQL é permitido realizar consultas:
- na lista de seleção que apresenta um campo diferente do informado na cláusula
group by
:
SELECT sabor FROM tabela_de_produtos GROUP BY embalagem;
- e nos campos listados na seleção que não estão em uma função de agregação e não precisam ser informados na cláusula
group by
:
SELECT Embalagem, descrição, SUM(preço) as Soma FROM tabela_de_produtos GROUP BY embalagem;
ou
SELECT Embalagem, SUM(preço) as Soma FROM tabela_de_produtos;
Conclusão
Neste artigo, vimos um pouco sobre as cinco funções de agregação nativas da linguagem SQL que são utilizadas por todos os banco de dados: COUNT
, SUM
, MAX
, MIN
e AVG
. Também apresentamos a execução de cada função e como os bancos de dados SQL Server, MySQL, PostgreSQL e Oracle trabalham internamente com as funções de agregação.
Gostou deste artigo e quer conhecer mais sobre cada banco de dados e as funções da linguagem SQL? Então conheça as nossas formações: