尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
LeetCode SQL 必会的 5 个窗口函数:ROW_NUMBER、RANK、DENSE_RANK、LAG、LEAD 一文搞懂
在刷 LeetCode SQL 时很多题目都会涉及窗口函数Window Function。其中最常用的其实只有 5 个而前三个几乎是每个 SQL 面试都会考察的重点。本文将通过实例讲解这 5 个窗口函数的区别以及适用场景。一、什么是窗口函数普通聚合函数如SUM()、COUNT()会把多行数据聚合成一行。例如SELECT COUNT(*) FROM Employee;返回count10而窗口函数不会减少数据行数而是在保留每一行的基础上计算一个新的结果。例如SELECT name, salary, ROW_NUMBER() OVER(ORDER BY salary DESC) FROM Employee;结果namesalaryrow_numberMax900001Joe850002Henry800003可以看到每一行仍然保留只是多了一列排名。二、5 个最常用的窗口函数1. ROW_NUMBER() —— 连续编号作用给每一行分配唯一编号。SELECT name, salary, ROW_NUMBER() OVER( ORDER BY salary DESC ) AS rn FROM Employee;假设工资如下salary90000850008500069000结果salaryrn900001850002850003690004特点每个人编号唯一即使工资相同也不会并列适用场景每组第一条数据去重最新一条记录2. RANK() —— 排名作用相同值并列但后面的排名会跳号。SELECT salary, RANK() OVER( ORDER BY salary DESC ) AS rnk FROM Employee;结果salaryrank900001850002850002690004注意由于两个员工都是第二名因此下一位直接变成第四名。这就是所谓的跳号排名。3. DENSE_RANK() —— 密集排名作用相同值并列但不会跳号。SELECT salary, DENSE_RANK() OVER( ORDER BY salary DESC ) AS rnk FROM Employee;结果salarydense_rank900001850002850002690003特点相同值排名一致后续排名连续LeetCode 中的「部门工资前三高员工」等题目基本都会使用DENSE_RANK()。例如DENSE_RANK() OVER( PARTITION BY department_id ORDER BY salary DESC )表示每个部门分别进行工资排名。4. LAG() —— 获取上一行数据作用获取当前行前面的第 N 行数据。例如daysales110021503200SQLSELECT day, sales, LAG(sales) OVER( ORDER BY day ) AS prev_sales FROM Sales;结果daysalesprev_sales1100NULL21501003200150常见应用连续登录连续数字环比增长股票涨跌5. LEAD() —— 获取下一行数据作用获取当前行后面的第 N 行数据。SELECT day, sales, LEAD(sales) OVER( ORDER BY day ) AS next_sales FROM Sales;结果daysalesnext_sales110015021502003200NULL常见应用判断下一天是否登录判断下一条记录连续区间问题三、三种排名函数对比假设工资如下salary90000850008500069000ROW_NUMBER()salary结果900001850002850003690004特点不管是否相同编号都不同。RANK()salary结果900001850002850002690004特点相同值并列。后面跳号。DENSE_RANK()salary结果900001850002850002690003特点相同值并列。不跳号。四、如何选择如果你的需求是每条记录一个唯一编号 →ROW_NUMBER()比赛排名允许跳号 →RANK()工资排名、前 N 高不跳号 →DENSE_RANK()获取上一条记录 →LAG()获取下一条记录 →LEAD()五、LeetCode 高频考点下面是刷 LeetCode SQL 时最常见的窗口函数应用函数典型题目ROW_NUMBER()每组第一条数据、去重RANK()比赛排名、成绩排名DENSE_RANK()部门工资前三高、Top N 问题LAG()连续登录、连续数字LEAD()下一次登录、下一条记录其中ROW_NUMBER()、DENSE_RANK()和LAG()的出题频率最高建议优先掌握。总结窗口函数最大的特点就是不减少数据行数而是在每一行上计算一个新的统计结果。记住下面这张表即可函数作用相同值处理ROW_NUMBER()连续编号编号不同RANK()排名并列后面跳号DENSE_RANK()密集排名并列不跳号LAG()上一行数据不是排名LEAD()下一行数据不是排名掌握这 5 个窗口函数基本可以解决 LeetCode SQL 中绝大多数涉及排名、连续记录和 Top N 的题目。
RELATED

相关推荐

2026.04.24高效办公工具组合:即插即用的职场救急方案

2026.04.24高效办公工具组合:即插即用的职场救急方案

1. 这不是“又一个工具包”,而是一套经过237次真实场景验证的效率组合拳 “2026.04.24实用教程工具分享”这个标题乍看平平无奇,像极了你邮箱里被自动归类到“订阅”文件夹的第17封周报。但如果你真把它当普通资源合集跳过,大概率会在接下来…

📅 2026/9/23 4:43:16
TGLStackedViewController源码解析:深入iOS UICollectionView扩展

TGLStackedViewController源码解析:深入iOS UICollectionView扩展

TGLStackedViewController源码解析:深入iOS UICollectionView扩展 【免费下载链接】TGLStackedViewController A stacked view layout with gesture-based reordering using a UICollectionView -- inspired by Passbook and Reminders apps. 项目地址: https://g…

📅 2026/9/23 4:43:36
Claude Code多文件协同编辑失效诊断清单:12类典型场景+对应AST级修复命令(含CLI一键修复脚本)

Claude Code多文件协同编辑失效诊断清单:12类典型场景+对应AST级修复命令(含CLI一键修复脚本)

更多请点击: https://intelliparadigm.com 第一章:Claude Code多文件协同编辑失效的底层机制解析 Claude Code在多文件上下文感知场景下出现协同编辑失效,根本原因在于其上下文窗口管理策略与文件依赖图建模的结构性脱节。当用户在编辑器中…

📅 2026/8/22 20:12:34
MORE NEWS

更多资讯

📰

战66新手避坑:市政公用工程代码性能优化实录

战66新手避坑:市政公用工程代码性能优化实录 刚把网上抄的“战66”数据清洗脚本跑起来,报错堆满屏幕,CPU 直接飙到 90%,内存泄漏得比漏水的市政管道还快。这种“复制来的代码跑不通不知道怎么调”的崩溃感,是无数市政公用工程数字化从业者的…

📰

同城小程序源码怎么选?零基础搭建多城市运营全攻略

做了这么多年互联网项目,我越来越觉得同城本地生活是个被低估的赛道。不管是跑腿、家政、二手交易还是本地信息发布,每个城市都有需求,但大平台往往覆盖不到那么细。所以“同城小程序源码”这个东西才会一直有热度,因为它把一套系…

📰

M3U8 索引解析与调试:从 Vue 播放到视频转换失败的完整排查指南

1. M3U8 在开发调试里,为什么总是让人想摔键盘先说一个我自己的场景。上个月接了一个 H5 视频项目的维护需求,用户在 iOS 的 Safari 里点播放,黑屏转圈十秒,然后弹“无法完成操作”。我用电脑打开同一个地址,播放器秒出…

📰

如何让声音变得好听图解原理

3招搞定音频降噪源码解析,让声音变得好听 盯着屏幕上一堆红色的 StackTrace,报错信息密密麻麻,是不是瞬间头大?明明只是想让录出来的语音清晰一点,结果代码一跑,全是 AudioFormatException 或者…

📰

OpenCV全景图像拼接原理与实战:从特征匹配到透视变换

简介:一套基于Python与OpenCV的多图全景拼接源码及文档说明,面向高校期末大作业与Python课程设计场景,解决多张图片自动拼接为全景图的需求。项目基于OpenCV实现特征点提取、图像配准与融合拼接,代码含清晰注释,简单部…

📰

气候资源评价与旅游康养适宜性分析实践

1. 项目背景与核心价值石柱县作为重庆东北部的生态屏障区,其气候资源评价与旅游康养适宜性分析对区域发展具有双重意义。从专业角度看,这类研究需要综合应用气象学、地理信息系统和旅游医学的交叉知识。我在参与类似项目时发现,县域尺度的气候…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬