news 2026/9/3 1:19:46

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/9/2 0:47:45

重磅升级|2026“泰迪杯”全新赛制发布,助力数字化人才实战成长

2026年1月29日晚&#xff0c;2026年“泰迪杯”数据挖掘挑战赛新赛制宣讲会在线上圆满落幕。本次宣讲会由“泰迪杯”挑战赛及技能赛命题专家华南师范大学杨坦老师以及泰迪智能科技创始人张良均董事长联合宣讲&#xff0c;首次系统性揭晓了“泰迪杯”赛制改革的各项内容与人才培养…

作者头像 李华
网站建设 2026/9/2 14:59:45

MonkeyCode 提速 Bug 修复,AI 精准定位让编码不中断

长亭MonkeyCode AI开发平台上线&#xff1a;免费算力赋能&#xff0c;AI助力全场景工程级研发落地当前AI编程工具层出不穷&#xff0c;但多数仅能应对“代码撰写、Demo运行”的基础场景&#xff0c;难以匹配真实工程研发的复杂诉求。长亭科技全新推出的AI开发平台MonkeyCode&am…

作者头像 李华
网站建设 2026/9/2 19:45:01

2026版最新黑客最常用的10款黑客工具,零基础入门到精通

前言 0. Kali Linux (渗透测试平台) 集成了众多安全工具的Linux发行版&#xff0c;专为渗透测试和安全审计设计。 Kali Linux预装了数百种渗透测试和安全审计工具&#xff0c;包括信息收集、漏洞分析、Web应用测试、密码攻击、无线攻击等多种功能&#xff0c;是安全专业人士的…

作者头像 李华