1、窗口函数简介
含义:
窗口函数(Online Anallytical Processing, 联机分析处理),可以对数据进行实时分析处理。
作用:
- 解决排名问题:每班按成绩排名
- 解决Top.N问题:每班成绩前2名的学生
语法:
select 窗口函数 over(partition by 用于分组的列名 order by 用于排序的列名)as 别名
注意:
- 由于窗口函数是顺序敏感函数,所以order by 不能没有;partition by可以没有,此时表示所有数据为一个窗口
- partition by 和 order by 之间没有逗号
- 运行出错可能因为mysql版本太低,5.8以后的版本才支持窗口函数
分类:
- 排名函数:row_number(),rank(),dense_rank()
- 聚合函数:max(), min(), count(), sum(), avg(), median()
- 向前向后取值:lag(), lead()
- 百分位:percent_rank()
- 取值函数:first_value(), last_value(), nth_value()
- 分箱函数:ntile()
位置:
窗口函数是对where或者group by子句处理后的结果进行操作,因此按照SQL语句的执行顺序,窗口函数一般放在select字句后。
2、窗口函数的使用
–
2.1 排名函数
row_number():1,2,3,4
rank():1,2,2,4
dense_rank():1,2,2,3
–
2.2 聚合函数
| 函数 | 含义 |
|---|---|
max() |
最大值 |
min() |
最小值 |
avg() |
平均值 |
sum() |
求和 |
median() |
中位数 |
注意: rows unbounded preceding:从当前行往前的所有行,组成一个窗口
(其他形式以此类推,详情见 2.7 平均移动)
例【max(

本文深入介绍了SQL窗口函数的概念、作用及用法,包括排名函数如row_number()、rank()和dense_rank(),聚合函数,向前向后取值的lag()和lead(),以及百分位、取值函数、分箱函数和移动平均的应用。通过实例展示了如何利用窗口函数解决排名、Top.N问题、实时数据分析等场景。
最低0.47元/天 解锁文章
2578

被折叠的 条评论
为什么被折叠?



