深入解析SQL窗口函数:数据处理的神兵利器
一、什么是窗口函数?
窗口函数(Window Function)是SQL中用于在数据集的特定"窗口"(数据子集)上执行计算的特殊函数。与传统聚合函数不同,窗口函数不会将多行合并为单行结果,而是在保留原始行数据的同时,为每一行添加额外的计算结果。
核心特点:
- 保持行级粒度:在计算结果的同时保留所有原始数据
- 灵活定义窗口:通过PARTITION BY划分数据子集
- 动态排序支持:结合ORDER BY实现排序相关计算
- 滑动窗口机制:支持ROWS/RANGE定义移动计算范围
二、窗口函数核心语法
基础语法结构
SELECT
column_list,
window_function() OVER (
[PARTITION BY partition_expression]
[ORDER BY sort_expression [ASC|DESC]]
[frame_clause]
) AS alias
FROM table_name;
核心组件解析
1. PARTITION BY(可选)
将数据集划分为多个分区(类似GROUP BY分组)
-- 按部门分区计算
AVG(salary) OVER (PARTITION BY department)
2. ORDER BY(可选)
定义分区内的排序规则
-- 按入职日期排序累计求和
SUM(salary) OVER (ORDER BY join_date)
3. 帧子句(Frame Clause)
定义滑动窗口的范围(默认包含当前行到分区开始)
ROWS BETWEEN 3 PRECEDING AND CURRENT ROW -- 最近4行窗口
RANGE BETWEEN INTERVAL '7' DAY PRECEDING AND CURRENT ROW -- 7天范围
三、常用窗口函数分类
1. 聚合型窗口函数
SELECT
product_id,
sale_date,
amount,
AVG<