Artigo do tipo Exemplos Práticos
Recursos especiais neste artigo:
Artigo no estilo Curso Online.

Trabalhando com funções de agregação em SQL – Parte 2
Armazenar informações em Sistemas de Gerenciamento de Banco de Dados já, há muito tempo, passou a ser parte integrante de todas as empresas. Mas a maneira com a qual as empresas utilizam estes dados armazenados é que passa a ser um diferencial competitivo.

Para conseguir o benefício de utilizar os dados armazenados de maneira inteligente, a SQL oferece uma gama de funções que permitem a geração de relatórios com dados consolidados ou sumarizados e também a extração de dados estatísticos com base nas informações armazenadas.

Neste segundo artigo desta série, serão abordadas algumas funções de agregação presentes na SQL para a extração deste tipo de informação. A correta utilização destas funções, além de auxiliar em uma tomada de decisão mais acertada, permite a manutenção de um bom desempenho do SGBDR.

Em que situação o tema é útil
Em diversos momentos no ciclo de vida de um banco de dados pode ser necessário extrair dados de forma a criar relatórios com informações sumarizadas ou com dados estatísticos para auxiliar na tomada de decisão de negócios. Para este tipo de consulta é que o tema deste artigo se mostra de grande utilidade.

No primeiro artigo desta série abordamos as seguintes funções de agregação:

· AVG e SUM;

· CORR;

· COUNT;

· COUNT(*);

· COVAR_POP;

· COVAR_SAMP;

· CUME_DIST.

Porém, como mostramos no artigo anterior, a lista de funções de agregação não é pequena. Neste artigo continuaremos apresentando as outra funções de agregação através de exemplos práticos que podemos utilizar no dia-a-dia de sua aplicação.

As funções de agregação abordadas neste artigo são:

· DENSE_RANK;

· MIN e MAX;

· PERCENT_RANK;

· PERCENTILE_CONT;

· PERCENTILE_DISC;

· RANK;

· Família REGR;

· STDDEV_POP;

· STDDEV_SAMP;

· VAR_POP;

· VAR_SAMP.

Vejamos a partir de agora, através de exemplos, cada uma dessas funções de agregação. A sintaxe geral de utilização de funções de agregação é:

função_de_agregação( [ ALL | DISTINCT ] expressão)

É muito importante salientar que todas as funções de agregação, exceto a função COUNT(*), irão desconsiderar colunas com o valor NULL ao calcular o resultado.

A função DENSE_RANK

A função DENSE_RANK calcula uma classificação em um grupo para uma linha hipotética fornecida. Ranqueamentos nunca são ignorados, mesmo quando um grupo contém linhas que sejam classificados de forma idêntica.

A sintaxe do padrão ANSI SQL é:

DENSE_RANK(lista_de_valores) WITHIN GROUP (ORDER BY lista_de_ordenação)

lista_de_valores = expressão [,expressão...]

lista_de_ordenação = item_de_ordenação [,item_de_ordenação...]

item_de_ordenação = expressão [ASC|DESC] [NULLS FIRST|NULLS LAST].

O SGBDR Oracle suporta totalmente esta sintaxe padrão ANSI SQL.

Os SGBDRs DB2, MySQL, PostgreSQL e SQL Server não suportam esta sintaxe, no entanto, o DB2 suporta o DENSE_RANK como uma função analítica.

A Listagem 1 apresenta um exemplo da utilização da função de agregação DENSE_RANK.

Listagem 1. Exemplo de utilização da função de agregação DENSE_RANK.


  01. SQL> SELECT AMOUNT_SOLD, DENSE_RANK(4, 33.52) WITHIN 
   GROUP (ORDER BY CHANNEL_ID, AMOUNT_SOLD) AS DENSE_RANK
  02.   2    FROM SALES
  03.   3    WHERE PROD_ID=136
  04.   4    GROUP BY AMOUNT_SOLD;
  05.  
  06. AMOUNT_SOLD DENSE_RANK
  07. ----------- ----------
  08.       30,87          2
  09.       33,52          2
  10.       36,58          3
  11.       36,71          2
  12.        37,1          3
  13.       42,15          2
  14.       46,19          3
  15.       46,35          2
  16.       46,84          3
  17.  
  18. 9 rows selected.
  19.  
  20. Elapsed: 00:00:00.01

No exemplo da Listagem 1 foi analisado o DENSE_RANK do valor hipotético 33.52 para o produto 136 no canal de vendas 4. Este valor não existe na tabela, pois o produto 136 não foi vendido a este preço no canal de vendas 4.

...

Quer ler esse conteúdo completo? Tenha acesso completo