Trabalhando com funções de agregação

Trabalhando com funções de agregação
Danielle Oliveira
Danielle Oliveira

Compartilhe

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:

IDDescriçãoEmbalagemPreçoSabor
1Frescor do Verão - UvaGarrafa8.50Uva
2Linha Refrescante - LaranjaPET10.00Laranja
3Festival de Sabores - MaracujáGarrafa9.50Maracujá
4Frescor do Verão - LaranjaLata5.00Laranja
5Festival de Sabores - MaracujáLata6.00Maracujá
6Linha Refrescante - MangaPET9.00Maracujá
  • 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:

Na parte superior da imagem é apresentada 3 linhas numeradas de 1 a 3, respectivamente. A primeira linha contém a seguinte informação: SELECT embalagem, COUNT(*) as contagem FROM tabela_de_produtos GROUP BY embalagem;. Na parte inferior da tabela é apresentada uma barra de rolagem horizontal e uma tabela com duas colunas, sendo a resultante da query executada com a função COUNT. Na coluna embalagem temos as embalagens: garrafa, PET e Lata. Na coluna contagem temos o número 2 repetido nas três linhas.

  • 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:

Na parte superior da imagem é apresentada 3 linhas numeradas de 1 a 3, respectivamente. A primeira linha contém a seguinte informação: SELECT embalagem, AVG(preço) as média FROM tabela_de_produtos GROUP BY embalagem. Na parte inferior da tabela é apresentada uma barra de rolagem horizontal e uma tabela com duas colunas, sendo resultante da query executada com a função AVG. Na coluna embalagem temos as embalagens garrafa, PET e Lata. Na coluna média temos os números 9, 9.5 e 5.5.

  • 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:

Na parte superior da imagem é apresentada uma linha que contém a seguinte informação: SELECT embalagem, MAX(preço) as Máximo, MIN(preço) as Mínimo FROM tabela_de_produtos GROUP BY embalagem. Na parte inferior da tabela é apresentada uma barra de rolagem horizontal e uma tabela com três colunas, sendo resultante da query executada com as funções MAX e MIN. Na coluna embalagem temos as embalagens garrafa, PET e Lata. Na coluna máximo temos os números 9.5, 10 e 6. Na coluna mínimo temos os números 8.5, 9 e 5.

  • 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:

Na parte superior da imagem é apresentada uma linha que contém a seguinte informação: SELECT embalagem, SUM(preço) as Soma FROM tabela_de_produtos GROUP BY embalagem. Na parte inferior da tabela é apresentada uma barra de rolagem horizontal e uma tabela com duas colunas, sendo resultante da query executada com a função SUM. Na coluna embalagem temos as embalagens garrafa, PET e Lata. Na coluna soma temos os números 18,19 e 11.

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:

Danielle Oliveira
Danielle Oliveira

Danielle é formada em Sistemas de Informação. Faz parte do Scuba Team e atua nas áreas de Banco de dados, Business Intelligence e NoSQL. É apaixonada por livros, música e tecnologia.

Veja outros artigos sobre Data Science