SQL之窗口函数

SQL疑难之窗口函数


窗口函数

窗口函数(Window Functions)是一类特殊的函数,用于对数据集的行进行计算。这些函数通过定义一个窗口(window),即一组相关的行(通常与当前行有某种关联),来对数据进行计算。窗口函数常用于执行涉及排序、分组、排名、移动平均等操作的任务。

窗口函数定义

语法定义:

window_function(express) over(
	[partition by part_list]
	[order by order_list]
	[{rows|range}between frame_start and frame_end]
)

partition by – 表示将数据按照part_lsit进行分区
order by – 表示将各个分区内的数据按照order_list进行排序
rows – 选择前后几行,例如:rows between 3 preceding and 3 following 表示往前三行和往后三行,共7行数据,或者小于7(边界)
range – 选择数据范围 例如: range between 3 preceding and 3 following 表示所有值在c-3,c+3这个范围内的行

窗口函数

窗口函数的使用

在逻辑语义上,一个窗口函数的执行过程如下:

  1. 按窗口定义,将所有输入数据分区、排序
  2. 对每一行数据,计算frame范围
  3. 将frame内的行集合输入窗口函数,计算结果填入当前行
    窗口函数的执行分为排序和函数求值两部分
    partition by 和 order by 就是在排序阶段完成的
    对于函数求值,重点在frame处理
    1. 对于整个分区的frame(如 range between unbounded preceding and unbounded following),只需要对整个分区计算一次
    2. 对于逐渐增长的frame(如: range between unbounded preceding and current row),可以用aggregator维护累加的状态
    3. 对于滑动的frame(如:rows between 3 proceding and 3 following),要求aggregator不仅支持增加还支持减少(removable)

练习推荐:牛客/leetcode
leetcode题目推荐:
1934、1907、1393、1341、1321、1204、1193、1174、1164等

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值