news 2026/4/16 11:09:57

SQL窗口函数实践笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL窗口函数实践笔记

好,这个题目非常偏“进阶 SQL + 面试/实战”,我就直接给你一份能抄走用、也能讲给面试官听的《SQL 窗口函数实践笔记》
不灌水,**以“为什么 → 怎么写 → 什么时候用”**为主。


SQL 窗口函数实践笔记(Window Functions)


一、为什么要用窗口函数?

一句话概括:

窗口函数 = 在“不减少行数”的前提下做统计分析

对比一下 👇

传统 GROUP BY 的问题

SELECTdept,AVG(salary)FROMempGROUPBYdept;

窗口函数能做到什么?

SELECTname,dept,salary,AVG(salary)OVER(PARTITIONBYdept)ASdept_avgFROMemp;

✅ 行不丢
✅ 统计结果“贴”在每一行上


二、窗口函数的基本语法(核心)

函数名(...)OVER(PARTITIONBY...ORDERBY...ROWS/RANGE...)
子句作用
PARTITION BY分组(逻辑分组,不合并行)
ORDER BY窗口内排序
ROWS / RANGE窗口范围

三、常用窗口函数分类


1️⃣ 聚合类窗口函数

示例:部门平均工资
AVG(salary)OVER(PARTITIONBYdept)

常见函数:

📌区别于 GROUP BY:不合并行


2️⃣ 排名类窗口函数(高频)

ROW_NUMBER(不并列)
ROW_NUMBER()OVER(PARTITIONBYdeptORDERBYsalaryDESC)
RANK(并列跳号)
RANK()OVER(ORDERBYscoreDESC)
DENSE_RANK(并列不跳号)
DENSE_RANK()OVER(ORDERBYscoreDESC)
分数RANKDENSE_RANK
10011
9022
9022
8043

3️⃣ 偏移函数(分析神器)

LAG / LEAD
LAG(salary,1)OVER(ORDERBYmonth)

👉 取“上一行 / 下一行”的值

常见场景


4️⃣ 分布类函数(了解)


四、窗口范围(ROWS vs RANGE)

1️⃣ ROWS(基于行)

ROWSBETWEEN2PRECEDINGANDCURRENTROW

2️⃣ RANGE(基于值)

RANGEBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW

📌实战建议:优先 ROWS


五、实战案例(直接可用)


1️⃣ 每个部门工资排名 Top 3

SELECT*FROM(SELECTname,dept,salary,ROW_NUMBER()OVER(PARTITIONBYdeptORDERBYsalaryDESC)ASrnFROMemp)tWHERErn<=3;

🔥 面试必会


2️⃣ 计算工资环比增长

SELECTmonth,salary,salary-LAG(salary)OVER(ORDERBYmonth)ASdiffFROMemp_salary;

3️⃣ 累计求和

SUM(sales)OVER(ORDERBYdayROWSBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW)AStotal_sales

4️⃣ 去重保留最新一条

SELECT*FROM(SELECT*,ROW_NUMBER()OVER(PARTITIONBYuser_idORDERBYupdate_timeDESC)rnFROMuser_log)tWHERErn=1;

六、窗口函数执行顺序(面试点)

SQL 执行顺序(简化):

FROM → WHERE → GROUP BY → HAVING → SELECT → WINDOW FUNCTION → ORDER BY

📌 窗口函数不能写在 WHERE 中


七、性能 & 实战注意点


八、MySQL / PostgreSQL / Oracle 支持情况


九、面试一句话总结

窗口函数用于在不合并结果行的情况下进行排序、排名和统计分析,是分析型 SQL 的核心能力,常用于 TopN、环比、累计值等场景。


十、速记口诀(很有用)

GROUP BY 会合并行,窗口函数不合并;
排名用 ROW_NUMBER,分析用 LAG/LEAD。


如果你愿意,我可以下一步直接帮你:

你是数据分析 / 后端开发 / 面试准备哪个方向?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 23:18:46

医疗器械有源加速老化验证

有源加速老化&#xff0c;是指通过在实验室环境中施加高于正常使用条件的加速应力&#xff0c;在较短的时间内模拟产品在正常储存和使用条件下数年的老化过程&#xff0c;在评估性能的可靠性、功能稳定性和安全性是否满足设计预期。当前&#xff0c;医疗器械有源加速老化国内外…

作者头像 李华
网站建设 2026/4/14 13:33:56

Esri获得ISO认证,强化数据安全承诺

国际标准确保ArcGIS具备信息安全防护与跨行业合规能力 位置智能领域的全球领导者Esri已获得ISO/IEC 27001:2022认证。该认证能够助力Esri的ArcGIS用户满足数据驻留和当地监管要求&#xff0c;同时确保Esri的安全实践符合国际标准化组织(ISO)制定的相关要求。 ISO/IEC 27001:202…

作者头像 李华
网站建设 2026/4/12 20:20:32

冥想第一千七百八十二天(1782)

1.周一了&#xff0c;2026.02.02天气很好&#xff0c;骑着自行车来上班了&#xff0c;项目上全力以赴的一天。 2.感谢父母&#xff0c;感谢朋友&#xff0c;感谢家人&#xff0c;感谢不断进步的自己。

作者头像 李华
网站建设 2026/4/16 3:15:42

大模型(LLM)完全指南:AI范式转变与认知基础设施详解

大模型(LLM)标志着AI范式的根本转变&#xff0c;作为通用智能引擎和认知基础设施&#xff0c;它正从工具化AI转向能力型AI&#xff0c;从单一任务建模走向统一底座&#xff0c;推动人机协作新模式。大模型不仅改变文本生成&#xff0c;更将重构组织认知机制与流程入口&#xff…

作者头像 李华
网站建设 2026/4/10 22:29:23

程序员参加护网月薪7w?

护网行动背景 什么是“护网行动”&#xff1f; 指挥机构∶由公安机关统一组织的"网络安全实战攻防演习"。 护网分为两级演习∶公安部对总部&#xff0c;省厅对省级公司。 什么是“实战攻防演习” 每支队伍3-5 人组成&#xff0c;明确目标系统&#xff0c;不限制…

作者头像 李华