談談 T-SQL 中的 Window Function
常有朋友問,資料分析師的SQL功底該學到什麼程度。今天就先談談 T-SQL 中的 Window Function.
Window Function 包含了 4 個大類。分別是:
1 — Rank Function
2 — Aggregate Function
3 — Offset Function
4 — Distribution Function.
1 — Rank Function 平常用到最多
1.1 Rank() Over()
1.2 Row_Number() Over()
1.3 Dense_Rank() Over()
1.4 NTILE(N) Over()
這四個函式,要注意的地方有兩點:
a. Rank() Over() 與 Row_Number() Over() :
兩者唯一的區別,就在於Row_Number() Over() 真正實現了相同條件的兩條或者多條記錄是用唯一值來區別的。
b. Rank() Over() 與 Dense_Rank() Over() :
這兩者的區別,在於他們對位於相同排名之後的名次,是接著相同排名的連續數(Dense_Rank) 還是相隔 N 個相同記錄個數之後的連續數(Rank)。
所以 Dense_Rank 出來的結果都是連續數字,而 非Dense_Rank 出來的結果有可能有跳格數。
c. 除了有用法上的區別外,順帶說說分頁的實現:
第一種,我們平常用 Row_Number() 加 Top (N) 來實現 :
第二種,SQL Server 2012 之後的新功能:
按照量的大小倒序排,取第 2000 條後的記錄中前 100 條。
2 — Aggregate Function. 聚合資料
2.1 — Sum() Over()
2.2 — Count() Over()
2.3 — AVG() Over()
2.4 — MIN() Over()
2.5 — MAX() Over()
在使用 Aggregation 函式的時候,唯一要注意的地方就是 Order 子句。
Over::
::視窗中的視窗
舉一個例子:
3 — Offset Function:定位記錄
3.1 Lead()
3.2 LAG()
3.3 First_Value()
3.4 Last_Value()
3.5 Nth_Value()
這一類比較好理解,根據當前的記錄,獲取前後 N 條資料。
4 — Distribution Function: 分佈函式
4.1- PERCENT_RANK()
4.2 — CUME_DIST()
4.3 — PERCENT_COUNT()-
4.4 — PERCENT_DISC()
這一類應用,到目前為止,未用過。適用於財會類的統計。
文章轉載自:微信公眾號「有关SQL」
文章链接:https://mp.weixin.qq.com/s/vnmeSZWEKThfOmHsusDGjA
---------------------------------------------------------------------------------------------------------
我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。各位也可以關注我的Facebook,按讚我的臉書並私訊「10」,送你十週入門數據分析電子書唷!期待你與我互動起來~