MySQL-窗口函数
概念
窗口的意思是将数据进行分组,每个分组即是一个窗口,这和使用聚合函数时的group by分组类似,通过 over 关键字和 partition by 关键字来定义分组,但与聚合函数不同的地方是:
- 聚合函数(例如:sum/avg/min/max)会针对每个分组(窗口)聚合出一个结果(每一组返回一个结果)。
窗口函数会对每一条数据进行计算,并不会使返回的数据变少(每一行返回一个结果)。 - 窗口函数会逐行计算,其重点是计算当前行与窗口内其他成员之间的关系,例如:组内排序,累积分布等。
1 | [你要的操作] OVER ( PARTITION BY <用于分组的列名> |
<窗口滑动的数据范围> 用来限定[ 你要的操作] 所运用的数据的范围,具体有如下这些:
1 | 当前行 - current row |
举例:
1 | 取当前行和前五行:ROWS between 5 preceding and current row --共6行 |
聚合窗口函数
sum
排序窗口函数
rank、dense_rank、row_number
1 | select *, |
结果:
rank:结果相同的会占用一名
dense_rank:结果相同的不占用一名
row:记录行
示例:TopN问题
1 | select * |
参考:
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.