2020.07.10 突然發現自己文章的圖片不見了,還好在自己的部落格有進行備份,若您想要看完整的文章:
序列函數 RANK, DENSE_RANK, NTILE 介紹與比較
這一篇我們將簡單比較一下 RANK() 與 DENSE_RANK() 兩個函式之間的不同。
RANK 語法如下
RANK (integer_expression)
OVER ( [ <PARTITION_BY ...> ] < ORDER_BY_CLAUSE > )
DENSE_RANK 語法如下
DENSE_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開始。
SELECT [Id]
,[Name]
,[Salary]
,DENSE_RANK() OVER (ORDER BY [SALARY] DESC) AS [Rank]
FROM [test].[dbo].[Employee]
若使用DENSE_RANK()函式,你會發現不重複排序後,會接續排序。以下結果為例,你可以看節排序從5繼續延伸下去。
https://dotblogs.com.tw/jerrytab/2012/12/20/85817