news 2026/4/18 12:37:30

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/18 5:31:49

python变量详解

好&#xff0c;这一题是 Python 入门到进阶都绕不开的核心。 我会按 “是什么 → 怎么用 → 底层原理 → 易错点 → 面试/实战总结” 给你一篇真正把变量讲透的说明。 Python 变量详解 一、Python 中的变量是什么&#xff1f; 一句话定义&#xff1a; Python 变量本质上是“对…

作者头像 李华
网站建设 2026/4/18 8:48:07

【毕设】基于Python的Django-html基于机器学习的文本情感系统

&#x1f49f;博主&#xff1a;程序员俊星&#xff1a;CSDN作者、博客专家、全栈领域优质创作者 &#x1f49f;专注于计算机毕业设计&#xff0c;大数据、深度学习、Java、小程序、python、安卓等技术领域 &#x1f4f2;文章末尾获取源码数据库 &#x1f308;还有大家在毕设选题…

作者头像 李华
网站建设 2026/4/17 20:00:55

莫凡电视:全国地方台全覆盖 核心技术解析

各位技术爱好者&#xff0c;莫凡电视主打全国省市县地方台全收录&#xff0c;依托硬核技术实现信号稳、播放顺&#xff0c;适配智能电视、机顶盒等终端&#xff0c;体验拉满。 采用 IPTVDTMB 双模架构&#xff0c;搭配专用多协议解码器&#xff0c;精准捕捉各地数字信号&#…

作者头像 李华
网站建设 2026/4/18 8:04:15

AI视角下:非农周财经事件与保证金调整的深度剖析

摘要&#xff1a;本文通过运用AI大数据分析模型与多源数据融合技术&#xff0c;结合历史经济数据、市场动态信息以及实时舆情监测数据&#xff0c;分析非农周财经事件及保证金调整对金融市场的影响。一、本周财经事件1. 美非农就业数据本周五非农就业数据发布呈现密集态势。借助…

作者头像 李华