一、概述
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
