SQL Server(00):排名函數




一、概述

SQL Server的排名函數是對查詢的結果進行排名和分組,TSQL共有4個排名函數,分別是:RANK、NTILE、DENSE_RANK和ROW_NUMBER,和OVER()函數搭配使用,按照特定的順序排名。

ROW_NUMBER、DENSE_RANK、RANK、NTILE屬於排名函數。排名開窗函數可以單獨使用ORDER BY 語句,也可以和PARTITION BY同時使用。

  • PARTITION BY用於將結果集進行分組,開窗函數應用於每一組。
  • ODER BY 指定排名開窗函數的順序。在排名開窗函數中必須使用ORDER BY語句。

1、ROW_NUMBER:行號

為每一組的行按順序生成一個唯一的序號。序列從1開始,按照順序依次 +1 遞增。分組內序列的最大值就是該分組內的行的數目。

ROW_NUMBER ( )OVER ( [ PARTITION_BY_clause ] order_by_clause )

2、RANK:排名

也為每一組的行生成一個序號,但如果按照ORDER BY的排序,如果有相同的值會生成相同的序號,並且接下來的序號是不連續的。例如,班級中,A,B分數都是100分,C的分數是90分,那么A和B的排名是1,C的排名是3

3、DENSE_RANK:密集排名

和RANK(排名)類似,不同的是如果有相同的序號,那么接下來的序號不會間斷。例如,班級中,A,B分數都是100分,C的分數是90分,那么A和B的排名是1,C的排名是2

4、NTILE :分組排名

按照指定的數目將數據進行分組,並為每一組生成一個序號。

特別地,NTILE(4) 把一個分組分成4份,叫做Quartile。例如,以下腳本顯示各個排名函數的執行結果:

select Department
    ,LastName
    ,Rate
    ,row_number() over(order by Rate) as [row number]
    ,rank() over(order by rate) as rate_rank
    ,dense_rank() over(order by rate) as rate_dense_rank
    ,ntile(4) over(order by rate) as quartile_by_rate
from #data


免責聲明!

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



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