iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 21
1
Data Technology

SQL Server 學習日誌系列 第 21

21. 透過 RANK() 與 DENSE_RANK() 進行資料排序

  • 分享至 

  • xImage
  •  

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


上一篇
20. 透過 NTILE 函式將資料進行分群
下一篇
22. 透過 FOR JSON AUTO/PATH 產生 JSON 資料
系列文
SQL Server 學習日誌30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言