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