【Hive】窗口函数详解

最近工作中经常遇到窗口函数,看了一些视频讲的不是很清楚,于是又查阅了一些资料,通俗的学透它,理解它,之后忘记也可以看这个想起来

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 就是截止到当前行的最后一行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InceptionZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值