淺談使用T-SQL次序函數 Rank
淺談使用T-SQL次序函數 RANK
1. 前言
n 在此篇文章中淺談專案在計算新客戶的計數上使用到的次序函數 RANK。
n SQL Server 2005以後就開始提供一些好用的視窗函數(Window Function),次序函數為其中一項好用的函數。
n 視窗函數--前身為OLAP 函數。
2. RANK:回傳結果集分割區內每個資料列的次序。資料列的次序等於一加上前述資料列之前的次序數目。
n ROW_NUMBER 和 RANK兩者很類似。
ROW_NUMBER:依序為所有資料列編號 (例如 1、2、3、4、5)。 RANK:則對所有資料列中相同數值列提供相同的序號 (例如 1、2、2、4、5)。
n SQL語法:
RANK ( ) OVER ( [ partition_by_clause ] order_by_clause )
3. 專案在計算新客戶的計數上使用到的RANK()函數範例說明。
n 使用資料:
會員在不同的通路下的交易日期的資料表。如圖(一)。
n SQL script:
以會員在不同的通路下依交易日期進行排序(RANK)
n 執行SQL結果,如圖(二):
n 圖(二)中會員代號為287的客戶在CDLY通路進行的交易共有七筆, 但有四筆在同一時間進行交易,使用RANK 的結果排序如圖(三);也就是對所有資料列中相同數值列提供相同的序號à1,2,3,4,4,4,4 (如前述說明)。
n 因專案要取得的各個通路的新客戶,故再對Rank進行條件篩選取得如下結果圖(四) 。
n 上述資料結果,再提供給報表進行統計,如下結果圖(五) 。
參考資料:
https://docs.microsoft.com/zh-tw/sql/t-sql/functions/rank-transact-sql?view=sql-server-ver15