2026-05-20
理解了窗口函数的执行流程
终于搞懂了窗口函数分区处理的完整流程,原来每个分区是独立计算的,来彻底厘清了!
今天终于把窗口函数的执行流程搞清楚了。
核心理解:窗口函数不会像 GROUP BY 那样折叠行,而是在每一行上计算一个"窗口"范围内的聚合值,行数保持不变。
SELECT
name,
department,
salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank,
AVG(salary) OVER (PARTITION BY department) AS dept_avg
FROM employees;
关键点:
PARTITION BY相当于分组,但不折叠ORDER BY决定窗口内的排序和帧范围- 执行顺序:WHERE → GROUP BY → HAVING → 窗口函数 → ORDER BY → LIMIT