前言
在前一篇文章,我們簡單介紹了 ROW_NUNBER的使用方法與案例,在這一篇文章,我們會對於其他序列函數,包含RANK, DENSE_RANK, NTILE進行介紹與比較。本篇文章若有錯誤或任何建議,請各位前輩不吝指教。關鍵字:RANK, DENSE_RANK, NTILE
介紹
在介紹這些序列函數之前,我們先簡單建立範例資料表與資料。RANK 函式
使用方法如下RANK (integer_expression) OVER ( [<partition_by >] < ORDER_BY_CLAUSE > )RANK 主要會依據指定的資料欄位排序進行編號,當資料內容相同時,其序號會一致;連續相同資料後遇到不同資料,其序號會以 原序號+連續資料比數繼續排序。我們下列語法為例說明:
SELECT [Id] ,[Name] ,[Salary] ,RANK() OVER (ORDER BY [SALARY] DESC) AS [Rank] FROM [test].[dbo].[Employee]
我們透過薪水作為依據:你會發現排序的時候,金額重複的部分會有相同的排序,但後續的資料並不會接續排序。以下結果為例,你可以看見不重複的排序會從7開始。
DENSE_RANK 函式
使用方法如下DENSE_RANK (integer_expression) OVER ( [<partition_by >] &; ORDER_BY_CLAUSE > )DENSE_RANK 與 RANK 相似,最大的不同在於排序的序號會接續下去,我們以下列語法為例:
SELECT [Id] ,[Name] ,[Salary] ,DENSE_RANK() OVER (ORDER BY [SALARY] DESC) AS [Rank] FROM [test].[dbo].[Employee]你會發現不重複排序後,會接續排序。以下結果為例,你可以看節排序從5繼續延伸下去。
NTILE 函式
使用方法如下NTILE (integer_expression) OVER ( [<partition_by >] < ORDER_BY_CLAUSE > )NTILE 函式比較有趣一點,與DENSE_RANK 與 RANK 相似,最大不同點在於會依據欄位資料內容進行等比例分割(輸入參數為想要份數),並給予序號。我們以下列語法為例,我們要把資料分成四份:
SELECT [Id] ,[Name] ,[Salary] ,NTILE (4) OVER (ORDER BY [SALARY] DESC) AS [Rank] FROM [test].[dbo].[Employee]結果,我們可以看見資料被分成四等分,相當簡單:
參考資料
1.NTILE (Transact-SQL) - Microsoft Doc2.程式設計師之家 - dotblog
0 留言