窗口函数中的范围规定

1. order by排序

在窗口函数中, 格式为:
xxx over (partition by xxx order by xxx)
其中, order by并不是必须的, 如果没有order by, 这个窗口函数的范围是全体, 这里我们通过一个表来讲解

numpart
1zzq
2zzq
3zzq
4zzq
5zzq

这里的part字段是用来分区的, 由于窗口函数一定要分区, 我们使用part分区
那么当我们没有order by的时候, 结果为:

numpartsum
1zzq15
2zzq15
3zzq15
4zzq15
5zzq15

而当我们有order by的时候, 结果为:

numpartsum
1zzq1
2zzq3
3zzq6
4zzq10
5zzq15

这里不难发现, 当加了order by后, 它只会聚合在当前行之前的数据

2. 定义窗口函数的范围

当窗口函数不使用order by的时候, 默认的作用范围为所有, 而使用order by且不自定义范围的时候, 默认为从头到当前行聚合, 那么如何规定窗口函数范围呢?
格式: (从当前行到最后一行)
sum(num) over (partition by part order by num rows between current now and unbounded following)
这里就使用了between 1 and 2 函数, 在1的位置上, 是数据开始的位置, 2是结束的位置, 所以如果我们希望从这一行的上一行进行计算也可以实现, 接下来就是一些1 2 的指标有哪些:
unbounded preceding: 从头开始
n preceding: 从该行的前n行开始
current row: 当前行
n following: 到该行的后n行
unbounded following: 到最后
注意: 这里并不是说current row前面就只能出现在1的位置, 也不是说后面的就只能在2的位置, 比方说:
between unbounded preceding and 1 preceding: 这里1和2都是使用的preceding, 那么这里的含义就是从头开始到该行的上一行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值