【Mysql数据库进阶01】窗口函数

1 定义

完整的窗口函数定义如下:

window_function([expression]) over(
	partition by
	order by
	frame_clause
)

其中window_function是窗口函数的名称,expression是可选择的分析对象
partition by包含分区类似group by
order by排序
frame_clause窗口大小

2 聚合窗口函数

在这里插入图片描述

2.1 默认效果/累计效果

rows between unbounded preceding and current row默认效果/累计效果
在这里插入图片描述
比如说可以用于查找短期之内(5天)累计转账超过100万元的账号

2.2 前面两行+当前一行

rows between 2 preceding and current row 前面两行+当前一行
在这里插入图片描述

2.3 前面一行+当前一行+后面一行

rows between 1 preceding and 1 following 前面一行+当前一行+后面一行
在这里插入图片描述

3 排名窗口函数

3.1 排名函数

排名窗口函数可以用来获取数据的分类排名。常见的排名窗口函数如下:
row_number()函数可以为分区中的每行数据分配一个序列号,序列号从1开始
rank 函数返回当前行在分区中的名次。如果存在名次相同的数据,后续的排名将会产生跳跃
dense_rank()函数返回当前行在分区中的名次。紧凑排名,不产生跳跃
percent_rank()函数以百分比的形式返回当前行在分区中的名次。如果存在名次相同的数据,后续的排名将会产生跳跃。
在这里插入图片描述
在这里插入图片描述
更方便的写法:

select emp_name,dept_id,salary,
	   row_number() over w rn,
	   rank() over w rk
from employee e 
window w as (partition by dept_id order by salary desc);

3.1.1 排名函数案例

牛客:对所有员工的薪水按照salary降序进行1-N的排名

select emp_no,salary,dense_rank() over (order by salary desc) t_rank
from salaries
order by t_rank asc,emp_no asc

学完窗口函数,仿佛发现新大陆

3.2 累积分布

cume dist()函数计算当前行在分区内的累积分布。
ntile()函数将分区内的数据分为N等份,并返回当前行所在的分片位置。
在这里插入图片描述

在这里插入图片描述


ntile()函数:
在这里插入图片描述

4 取值窗口函数

LAG函数可以返回窗口内当前行之前的第N行数据。
LEAD函数可以返回窗口内当前行之后的第N行数据。
FIRST_VALUE函数可以返回窗口内第一行数据。
LAST_VALUE函数可以返回窗口内最后一行数据
NTH_VALUE函数可以返回窗口内第N行数据。

我还没有系统性学习这个,先放在这
视频链接:【MySQL编程思想】第46节 同比环比及复合增长率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

失舵之舟-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值