SQL Server “Denali” – função CUME_DIST()

Compartilhe este artigo!

Sobre o autor

Entre em contato...

Redação ForumWeb

Redação ForumWeb Equipe de desenvolvimento do ForumWeb.com.br, responsável pelas dicas e downloads do site.

Site do autor: http://www.forumweb.com.br

Indique este artigo

Para

Seu email

Mensagem

Fechar
Personalize sua mensagem

Código

Arquivos relacionados

  • Por enquanto, nenhum arquivo para download.

SQL Server “Denali” – função CUME_DIST()

Segunda-Feira, 22 de Agosto de 2011 às 11:20

A função analítica CUME_DIST() calcula a posição relativa de um valor relativo em um grupo de valores. O valor retornado pela CUME_DIST() é > 0 e <= 1, que representa a porcentagem do número de linhas com valor inferior (por ordem ascendente) ou igual a linha atual.

Por exemplo, considere os dados abaixo:

Ano         Mês         Quantidade
2010        1           5000.00
2010        2           6000.00
2010        3           7000.00
2010        4           2000.00
2011        1           1000.00
2011        2           2000.00
2011        3           3000.00
2011        4           4000.00

A distribuição cumulativa da linha 4 (ano = 2010, mês =4) será 37,50%, em número de linhas que tem o valor <= 4 são 3 linhas, e o valor retornado pelo CUME_DIST() será 0,375.

A CUME_DIST() pega uma cláusula ORDER BY como argumento, e a cláusula ORDER BY determina a ordem que a operação é realizada:

SELECT [Ano], [Mês], [Quantidade],
       CUME_DIST() OVER (ORDER BY [Quantidade]) CUME_DIST
FROM   dbo.SalesData
ORDER BY [Quantidade]

Resultado:

Ano         Mês         Quantidade            CUME_DIST
2011        1           1000.00               0.125
2011        2           2000.00               0.375
2010        4           2000.00               0.375
2011        3           3000.00               0.5
2011        4           4000.00               0.625
2010        1           5000.00               0.75
2010        2           6000.00               0.875
2010        3           7000.00               1

Também podemos usar a PARTITION BY para dividir o conjunto de resultados:

SELECT [Ano], [Mês], [Quantidade],
       CUME_DIST() OVER (PARTITION BY [Ano] ORDER BY [Quantidade])
       CUME_DIST
FROM   dbo.SalesData
ORDER BY [Ano], [Mês], [Quantidade]

Resultado:

Ano         Mês         Quantidade            CUME_DIST
2010        1           5000.00               0.5
2010        2           6000.00               0.75
2010        3           7000.00               1
2010        4           2000.00               0.25
2011        1           1000.00               0.25
2011        2           2000.00               0.5
2011        3           3000.00               0.75
2011        4           4000.00               1

A função CUME_DIST() também está disponível para Oracle desde a versão 8i, e também pode ser usado como função agregada em Oracle.

Autor/Fonte: SQL & Me

Qual a sua opinião?

Comente e interaja!



Ainda sem comentários, comente!