【DA】-【SQL】-【窗口函数学习】
程序员文章站
2022-05-25 17:05:08
...
0.概述
- 参考:通俗易懂学会SQL窗口函数;
- 窗口函数的作用、语法、示例。
1.SQL窗口函数作用?
- 面向各组内排序的业务需求,例如每个部门按业绩排名、每个部门排名Top N的员工等。
2.SQL窗口函数定义?
- 窗口函数又叫OLAP函数(Online Analytical Processing,联机分析处理),虽然不太清楚为什么,但是它的作用是能够实时处理数据库当中的数据。
3.SQL窗口函数的语法?
<窗口函数> over (partition by <用于分组的列> order by <用于排序的列>)。
- 以第1部分的栗子“每个部门按业绩排名”为例,<用于分组的列>则是部门,<用于排序的列>则是业绩。
- <窗口函数>分为两种:一般聚合函数和专用窗口函数。
- 聚合函数:sum(), avg(), count(), max(), min();
- 专用函数:rank(), dense_rank(), row_number(), ntile()。
(1)row_number()对于每条记录都给出一个排序序号,如1,2,3;
(2)rank()函数对排序列值相同的记录给出相同的排序序号,如1,2,2;
(3)dense_rank()和rank()类似,都会给值相同的记录以相同序号,但是区别于rank()的连续分配1,2,2,3,3,3;dense_rank()给出的结果会是1,2,2,4,4,4跳跃序号结果。
(4)举个栗子:
百米赛跑成绩为张三10.00秒,李四10.00秒,王二麻子10.01。
那么按照row_number()排序序号是-张,李,王:1,2,3;
rank()排序序号是-张,李,王:1,1,2;
dense()排序序号是-张,李,王:1,1,3.
按照row_number()冠亚季军各有归属;按照rank()有两位并列冠军,一位亚军;
按照dense_rank()也是两位并列冠军,没有亚军(瞎说一下举个例子而已),只有季军。
(5)ntile()函数则是将数据分区,
比如ntile(1),那么-张,李,王:1,1,1;ntile(2),那么-张,李,王:1,1,2;
ntile(3),那么-张,李,王:1,2,3。
备注:窗口函数原则上智只能写在select子句当中。
4.SQL窗口函数的应用?
- 可参考:通俗易懂的学会:SQL窗口函数。
- 待补充。