文章目录
- 1 窗口函数概述
- 2 语法规则
- 3 窗口聚合函数的使用
- 4 窗口表达式
- 5 窗口排序函数
- 5.1 row_number家族
- 5.2 ntile函数
- 6 窗口分析函数
最近工作中经常遇到窗口函数,看了一些视频讲的不是很清楚,于是又查阅了一些资料,通俗的学透它,理解它,之后忘记也可以看这个想起来
1 窗口函数概述
直观去感受一下窗口函数和group by分组之间的区别
2 语法规则
3 窗口聚合函数的使用
主要包括sum,max,min,avg,接下来以sum为例,其它都类似。窗口函数配合聚合函数功能非常强大,在工作中用的很多
特别注意的点:
(1)要不要使用order by。order by当且仅当 在聚合函数中是累计求和的概念,
(2)order by 后面加不加窗口表达式,如果不加,默认从第一行到当前行 (3)上面两个可以溯源到官网
4 窗口表达式
一些例子可供参考
5 窗口排序函数
5.1 row_number家族
rank:在每个分组中,为每行分配一个从1开始的序列号,考虑重复,例如[1,2,2,4]
row_number:在每个分组中,为每行分配一个从1开始的唯一序列号,递增不重复,例如[1,2,3,4]
dense_rank:在每个分组中,为每行分配一个从1开始的序列号,考虑重复,例如[1,2,2,3]
记忆方法:
对于row_number理解它为行号就行,行号肯定是不重复的;对于dense_rank,理解dense,减少,说明如果出现重复的,序号数字会小于行数。记忆两个剩下的就记住了
注意:
这里order by 不要有累计的想法,但原理上窗口大小还是累计增加的,为了搞混,我们只需要记住这个就是排序
5.2 ntile函数
6 窗口分析函数
举个例子,以LAG为例
FIRST_VALUE:如果出现order by 就是截止到当前行的第一行
LAST_VALUE:如果出现order by 就是截止到当前行的最后一行