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

排名函數是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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM