[[416110]]
本文转载自微信公众号「有关SQL」,作者Lenis。数据师的什程转载本文请联系有关SQL公众号。分析
常有朋友问,底该度数据分析师的数据师的什程SQL功底该学到什么程度。今天就先谈谈 T-SQL 中的分析 Window Function.
Window Function 包含了 4 个大类。分别是底该度:
这四个函数,要注意的数据师的什程地方有两点:
a. Rank() Over() 与 Row_Number() Over() :
两者唯一的区别,就在于Row_Number() Over() 真正实现了相同条件的分析两条或者多条记录是用唯一值来区别的
b. Rank() Over() 与 Dense_Rank() Over() :
这两者的区别,在于他们对位于相同排名之后的底该度名次,是数据师的什程接着相同排名的连续数(Rank) 还是相隔 N 个相同记录个数之后的连续数(Dense_Rank)。
所以 Rank 出来的分析结果都是连续数字,而 Dense_Rank 出来的底该度结果有可能有跳格数。
c. 除了有用法上的区别外,顺带说说分页的实现:
第一种,我们平常用 Row_Number() 加 Top (N) 来实现 :
- select top(100) *
- from ( select
- OrderId
- , OrderMonth
- , OrderAmount
- , Row_Number() Over(
- OrderBy OrderAmount DESC)
- AS Amt_Order
- from FctSales) tmp
- Where Amt_Order between 2000 and 3000
第二种,SQL Server 2012 之后的新功能:
- Select OrderId
- , OrderMonth
- , OrderAmount
- From FctSales
- Order by OrderAmount Desc
- OffSet 2000 ROWS
- Fetch Next 100 ROWS Only
按照量的大小倒序排,取第 2000 条后的记录中前 100 条。
在使用 Aggregation 函数的时候,唯一要注意的地方就是 Order 子句。
- function_name(<arguments>) Over(
- [ <window partition clause>]
- [ <window Order clause>
- [ <window frame clause>]
- ])
Over::
- Over(
- [ <PARTITION BY clause> ]
- [ <ORDER BY clause> ]
- [ <ROW or RANGE clause> ]
- )
::窗口中的窗口
- ROWS | RANGE
- BETWEEN
- UNBOUNDED PRECDEDING |
- <N> PRECEDING |
- <N> FOLLOWING |
- CURRENT ROW
- AND
- UNBOUNDED FOLLOWING |
- <N> PRECEDING |
- <N> FOLLOWING |
- CURRENT ROW
举一个例子:
- select custid
- , ordermonth
- , ordervolume
- , sum(ordervolume)
- over( partition by custid
- order by ordermonth asc
- rows between
- unbounded preceding
- and current row)
- as cumulatedVolume
- from FctSales
统计了截止到目前为止,每一天的累计总量。
这一类比较好理解,根据当前的记录,获取前后 N 条数据。
这一类应用,到目前为止,未用过。适用于财会类的统计。
责任编辑:武晓燕 来源: 有关SQL 数据库数据分析师
(责任编辑:热点)
中城工业集团汾湖星舰超级工厂:打造智慧产业园区,赋能行业转型升级
港铁公司(0066.HK)去年大幅亏损48.09亿港元 全年普通股息合共每股1.23港元
定制游企业讲述火线自救84天:CEO直播推护肤产品 挑战远未结束
ipo审核是什么意思?股票市场上常常被提到的IPO的意思是什么?