SQL中的窗口函数

窗口函数

  • MySQL从8.0开始支持窗口函数,也称分析函数(处理相对复杂的报表统计分析场景),这个功能在大多商业数据库和部分开源数据库中早已支持。
  • 窗口:满足某种条件的记录集合
  • 窗口函数:在窗口内使用的函数,也就是在满足某种条件的记录集合上执行的特殊函数。对于每条记录都要在此窗口内执行函数,窗口大小都是固定的,这种属于静态窗口;不同的记录对应着不同的窗口,这种动态变化的窗口叫滑动窗口。
函数名([expr]) over子句
函数名([expr]) over (
					partition by <列名> 
    		 		order by <列名> 
    		 		rows between 开始位置 and 结束位置
       				)
  • over是关键字,用来指定函数执行的窗口范围,包含三个分析子句

1、分组(partition by)子句,搭配分析函数时,分析函数按照每一组每一组的数据进行计算的。
2、排序(order by)子句,是排序的意思,是该窗口中的
3、窗口(rows)子句, 是指定窗口范围,比如第一行到当前行。而这个范围是随着数据变化的。over(rows between 开始位置 and 结束位置)搭配分析函数时,分析函数按照这个范围进行计算的。

PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:起点(一般结合PRECEDING,FOLLOWING使用)
UNBOUNDED PRECEDING 表示该窗口最前面的行(起点)
UNBOUNDED FOLLOWING:表示该窗口最后面的行(终点)
比如说:
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(表示从起点到当前行)
ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING(表示往前2行到往后1行)
ROWS BETWEEN 2 PRECEDING AND 1 CURRENT ROW(表示往前2行到当前行)
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING(表示当前行到终点)

rows between 2 preceding and current row # 取当前行和前面两行
rows between unbounded preceding and current row
#包括本行和之 前所有的行
rows between current row and unbounded following #包括本行和之后所有的行
rows between 3 preceding and current row
#包括本行和前面三行
rows between 3 preceding and 1 fol1owing
#从前面三行和下面一行, 总共五行
#当order by后面缺少窗口从句条件, 窗口规范默认 是rows between unbounded preceding and current
row.
#当order by和窗口从句都缺失,窗口规范默认是rows between unbounded preceding and unbounded
fo11owing
  • over()函数中如果不使用这三个函数,则意味着窗口包含满足where条件的所有行,窗口函数基于所有行进行计算

举个简单的例子

sum(A)...... over(
				   partition by ...B...	
				   order by ...C...
				   rows between ..D1.... and ..D2... 
				  )

A:需要被加工的字段名称
B:分组的字段名称
C:排序的字段名称
D:计算的行数范围
在这里插入代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值