使用RANK函数统计排行榜

 

使用RANK函数统计排行榜

RANK是一个从oracle 8.1.6 开始引入的统计函数。RANK的功能是按照某种分组方式计算出返回结果的排行。RANK函数有两个,一个是RANK,另外一个是DENSE_RANK。RANK排序在碰到并列值的时候,下一个排行序号会跳过并列的值,而DENSE_RANK排序的结果有并列排名,下一个排行顺序仅仅加一。

比如:

SQL> SELECT year, region, profit,dept ,

2 RANK() OVER ( ORDER BY profit DESC) as rk

3 FROM test;

YEAR REGION PROFIT DE RK

---- ------- ---------- -- ----------

2004 East 103 A 2 1

2003 East 102 A 1 2

2003 Central 101 A 1 3

2003 Central 100 A 2 4

2004 West 89 A 2 5

2003 West 88 A 1 6

2003 West 88 A 2 6

2004 West 77 A 1 8

2004 West 77 A 1 8

使用DENSE_RANK排名的结果为:

SQL> SELECT year, region, profit,dept ,

2 DENSE_RANK() OVER ( ORDER BY profit DESC) as rk

3 FROM test;

YEAR REGION PROFIT DE RK

---- ------- ---------- -- ----------

2004 East 103 A 2 1

2003 East 102 A 1 2

2003 Central 101 A 1 3

2003 Central 100 A 2 4

2004 West 89 A 2 5

2003 West 88 A 1 6

2003 West 88 A 2 6

2004 West 77 A 1 7

上面的例子是按照PROFIT进行排名。RANK函数支持分组排名,比如我们可以按照年份分组,然后计算排名:

SQL> SELECT year, region, profit,dept ,

2 RANK() OVER (PARTITION BY year ORDER BY profit DESC,REGION) as rk

3 FROM test;

YEAR REGION PROFIT DE RK

---- ------- ---------- -- ----------

2003 East 102 A 1 1

2003 Central 101 A 1 2

2003 Central 100 A 2 3

2003 West 99 A 2 4

2003 West 88 A 1 5

2004 East 103 A 2 1

2004 West 89 A 2 2

2004 West 77 A 1 3

这个查询首先对数据按照年份分组,然后在分组中计算排名。

经验分享 程序员 微信小程序 职场和发展