MySQL 8.0 窗口函数全面解析与实例
一、窗口函数概述
窗口函数(Window Functions)是 MySQL 8.0 引入的重要特性之一,允许在 不破坏原始数据行 的情况下,对数据进行 复杂分析(如排名、累计、滑动窗口计算等)。与传统的 GROUP BY
聚合不同,窗口函数通过 OVER()
子句定义计算范围,保留了每行的独立性。
二、窗口函数核心语法
<窗口函数> ([参数]) OVER ([PARTITION BY <分区列>] [ORDER BY <排序列>][ROWS/RANGE <窗口帧定义>]
)
PARTITION BY
:将数据划分为多个分区,每个分区独立计算。ORDER BY
:定义窗口内数据的排序规则。ROWS/RANGE
:定义窗口帧(计算范围),例如ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
(从分区开头到当前行)。
三、窗口函数分类与实例
1. 排名函数
用于为分区内数据分配行号或排名。
函数 | 功能描述 |
---|---|
ROW_NUMBER() | 为每行分配唯一序号(从1开始)。 |
RANK() | 相同值排名相同,后续排名跳跃。 |
DENSE_RANK() | 相同值排名相同,后续排名连续。 |
NTILE(n) | 将分区内行平均分成 n 组,分配组号。 |
实例 1:部门内员工薪资排名
SELECT department, name, salary,ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DE