MySQL 窗口函数进阶
使用窗口函数实现排名、移动平均和分组内计算。 · 难度:入门 · +15XP
MySQL 窗口函数
窗口函数(Window Functions)在MySQL 8.0中引入,允许在不合并行的情况下对查询结果集进行分组计算。常用窗口函数包括ROW_NUMBER、RANK、SUM、AVG等。
基本语法
函数名() OVER (
[PARTITION BY 列] [ORDER BY 列] [ROWS/RANGE 窗口范围]
)常用函数
| 函数 | 用途 |
|---|---|
| ROW_NUMBER() | 为每一行分配唯一序号 |
| RANK() | 排名,并列时跳过后续序号 |
| DENSE_RANK() | 排名,并列时不跳过序号 |
| SUM() | 累计求和 |
| LAG()/LEAD() | 访问前/后行数据 |
示例:部门内薪资排名
SELECT name, department, salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank_in_dept
FROM employees;示例:移动平均
SELECT date, amount,
AVG(amount) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg
FROM sales;练习提示
创建员工表,计算每个部门的薪资排名和累计薪资,尝试使用LAG函数查看前后员工薪资差异。