SQL SERVER中CUME_DIST和PERCENT_RANK函數

來源:互聯網
上載者:User

SQL SERVER中CUME_DIST和PERCENT_RANK函數
CUME_DIST和PERCENT_RANK函數


CUME_DIST,計算某個值在 SQL Server 2012 中的一組值內的累積分布。也即,CUME_DIST 計算某指定值在一組值中的相對位置。對於行r,假定採用升序,r 的 CUME_DIST 是值低於或等於r 的值的行數除以在分區或查詢結果集中求出的行數。

CUME_DIST 返回的值範圍大於 0 並小於或等於 1。 關聯值始終計算為相同的累積分布值。預設情況下包含 NULL 值,且該值被視為最低的可能值。 

PERCENT_RANK,計算 SQL Server 2012 中一組行內某行的相對排名。 使用 PERCENT_RANK 計算一個值在查詢結果集或分區中的相對位置。

PERCENT_RANK 返回的值範圍大於 0 並小於或等於 1。 任何一組中第一行的 PERCENT_RANK 都為 0。預設情況下包含 NULL 值,且該值被視為最低的可能值。

看一組SQL語句:

WITH testas(    select NULL as score    UNION ALL    select NULL    UNION ALL    select 10    UNION ALL    select 40    UNION ALL    select 40    UNION ALL    select 50    UNION ALL    select 50    UNION ALL    select 60    UNION ALL    select 90    UNION ALL    select 90    )select ROW_NUMBER() over(order by score) as rownum,score,cume_dist()over(order by score) as cum,PERCENT_RANK() over(order by score) as per_rnk,RANK() over(order by score) as rnkfrom test


把一組資料放進CTE暫存資料表進行CUME_DIST和PERCENT_RANK計算,結果:

rownum    score   cum   per_rnk                           rnk
1                 NULL    0.2      0                                        1
2                 NULL    0.2      0                                        1
3                10           0.3      0.222222222222222        3
4                40           0.5      0.333333333333333        4
5                40           0.5      0.333333333333333        4
6                50           0.7      0.555555555555556        6
7                50           0.7      0.555555555555556        6
8                60           0.8      0.777777777777778        8
9                90           1         0.888888888888889        9
10             90           1          0.888888888888889        9

首先,NULL都會被當作最小值。

cume_dist的計算方法:小於等於當前行值的行數/總行數

比如,第3行值為10,有3行的值小於等於10,總行數10行,因此CUME_DIST為3/10=0.3 。

再比如,第4行值為40,行值小於等於40的共5行,總行數10行,因此CUME_DIST為5/10=0.5 。


PERCENT_RANK的計算方法:當前RANK值-1/總行數-1 。

比如,第4行的RANK值為4,總行數10行,因此PERCENT_RANK為4-1/10-1= 0.333333333333333

再比如,第7行的RANK值為6,總行數10行,因此PERCENT_RANK為6-1/10-1=0.555555555555556





相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.