天天看点

sql rank()函数

RANK() OVER([<partiton_by_clause>])

  partition_by_clause 将from子句生成的结果集划分为应用到RANK函数的分区。 

  Order_by_clause确定将RANK值应用到分区中的行时所使用的顺序。

 以下用一个成绩表作示例

  table 架构

  s_score(s_class(班级),s_id(学号),s_score(分数))

  SQL statement1:

  Select rank() over(order by s_score desc) as 名次,s_class,s_id,s_score from s_score

  结果集如下

  名次 s_class s_id s_score

  1 二班 S20090733 100

  2 一班 S20090635 99

  3 三班 S20090919 97

  4 一班 S20090846 96

  5 一班 S20090825 95

  6 二班 S20090715 94

  7 三班 S20090836 91

  8 二班 S20090631 86

  SQL statement2:

  Select rank() over(partition by s_class order by s_score desc) as 名次,s_class,s_id,s_score from s_score

  结果集如下

  名次 s_class s_id s_score

  1 三班 S20090919 97

  2 三班 S20090836 91

  1 二班 S20090733 100

  2 二班 S20090715 94

  3 二班 S20090631 86

  1 一班 S20090635 99

  2 一班 S20090846 96

  3 一班 S20090825 95

SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较 排名函数是SQL Server2005新加的功能。在SQL Server2005中有如下四个排名函数:

  1.row_number

  2.rank

  3.dense_rank

  4.ntile  

dense_rank

  dense_rank函数的功能与rank函数类似,只是在生成序号时是连续的,而rank函数生成的序号有可能不连续。如上面的例子中如果使用dense_rank函数,第4条记录的序号应该是2,而不是4。如下面的SQL语句所示:

select dense_rank() over(order by field1),* from t_table order by field1

详解:http://www.cnblogs.com/xhyang110/archive/2009/10/27/1590448.html

转载于:https://www.cnblogs.com/ilrc/p/5414414.html