row_number()、dense_rank()、rank() 函数介绍和应用场景

news/2025/11/27 15:23:01/文章来源:https://www.cnblogs.com/ly315/p/19277698
一、函数介绍
核心差异总结
  • row_number():不考虑重复值,强制分配连续唯一序号(即使分数相同,序号也不重复);
  • rank():允许重复排名,但会跳过重复值占用的序号(如两个第 2 名后,下一名直接是第 4 名);
  • dense_rank():允许重复排名,且不跳过重复值占用的序号(如两个第 2 名后,下一名是第 3 名)。

 

二、分场景实战:该用哪个函数?
场景 1:数据去重 / 唯一记录筛选(优先 row_number ())
当需要按某字段分组,保留每组内 “最新 / 最优 / 指定条件” 的唯一记录时,row_number()是首选 —— 其 “唯一序号” 特性可精准定位目标记录。
案例:电商订单orders,需筛选每个用户的最新一笔订单(按下单时间降序)。
 
 
SELECT user_id, order_id, order_time, amount
FROM (
SELECT
user_id, order_id, order_time, amount,
-- 按用户分组,按下单时间降序分配唯一序号
row_number() OVER (PARTITION BY user_id ORDER BY order_time DESC) AS rn
FROM orders
) t
WHERE rn = 1; -- 仅保留每组序号1的最新订单
优势:即使同一用户同一时间有重复订单(极端情况),也能强制保留 1 条,避免结果重复;若rank(),可能因排名相同返回多条记录,不符合 “唯一筛选” 需求。
场景 2:竞争排名 / 奖项分配(优先 rank ())
适用于需要体现 “并列排名 + 跳过空缺名次” 的场景,如考试排名、竞赛颁奖 —— 符合大众对 “排名” 的认知(如两个第 2 名,下一名是第 4 名,而非第 3 名)。
案例:学生成绩student_score,按科目统计成绩排名,需展示并列情况并跳过空缺名次。
 
 
SELECT
subject, student_id, score,
-- 按科目分组,按分数降序排名
rank() OVER (PARTITION BY subject ORDER BY score DESC) AS rank
FROM student_score
ORDER BY subject, rank;
结果示例(数学科目)
subject
 
 
 
 
student_id
 
 
 
 
score
 
 
 
 
rank
 
 
 
 
数学
 
 
 
 
1
 
 
 
 
95
 
 
 
 
1
 
 
 
 
数学
 
 
 
 
2
 
 
 
 
90
 
 
 
 
2
 
 
 
 
数学
 
 
 
 
3
 
 
 
 
90
 
 
 
 
2
 
 
 
 
数学
 
 
 
 
4
 
 
 
 
85
 
 
 
 
4
 
 
 
 
适用场景:学校成绩单、赛事排名榜、绩效考核等级分配(如 “前 10% 为 A 级,10%-30% 为 B 级”,需按实际排名比例划分)。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
场景 3:连续排名 / 层级划分(优先 dense_rank ())
适用于需要 “并列排名 + 不跳过空缺名次” 的场景,核心是体现 “层级连续性”,无需关注名次空缺,仅需区分不同层级。
案例 1:会员等级划分 —— 消费金额前 20% 为钻石会员,20%-50% 为黄金会员,50%-80% 为白银会员,80% 后为青铜会员。
 
 
SELECT
user_id, total_consume,
-- 按消费金额降序连续排名(不跳过空缺)
dense_rank() OVER (ORDER BY total_consume DESC) AS dense_rank,
-- 按排名划分会员等级(假设总用户1000,200为钻石,201-500为黄金等)
CASE
WHEN dense_rank() OVER (ORDER BY total_consume DESC) <= 200 THEN '钻石会员'
WHEN dense_rank() OVER (ORDER BY total_consume DESC) <= 500 THEN '黄金会员'
WHEN dense_rank() OVER (ORDER BY total_consume DESC) <= 800 THEN '白银会员'
ELSE '青铜会员'
END AS member_level
FROM users;
优势:若rank(),可能因大量并列排名导致 “钻石会员” 数量远超 200(如前 200 名有 50 人并列第 200 名),dense_rank()的连续序号能精准匹配 “固定数量层级” 需求。
案例 2:数据分层统计 —— 统计各分数段的学生人数(如 90 分及以上、80-89 分、70-79 分...),dense_rank()可快速定位各分数段的排名范围。
三、易混淆场景对比与避坑指南
1. 何时不能用 row_number ()?
当需要保留 “并列记录” 时,row_number()会强制分配不同序号,导致丢失并列信息。例如:筛选 “分数前 3 名的学生”,若有两个第 3 名,row_number()会只保留 1 个,rank()dense_rank()能保留两个并列第 3 名,符合 “前 3 名” 的实际需求。
2. rank () 与 dense_rank () 的选择边界?
  • 关注 “名次空缺”→ rank()(如竞赛颁奖,不能有两个第 3 名却颁发 3 个奖牌);
  • 关注 “层级数量”→ dense_rank()(如会员等级、分数段划分,只需区分 “第几层”,无需跳过名次)。
3. 性能注意事项
三大函数均属于窗口函数,性能差异极小,但需注意:
  • 分组字段(PARTITION BY)尽量加索引,避免大表分组时全表扫描;
  • 排序字段(ORDER BY)若为非索引字段,大表场景下可能影响性能,需权衡是否必要排序。
三、总结:快速选型口诀
需求场景
 
 
 
 
推荐函数
 
 
 
 
核心原因
 
 
 
 
唯一记录筛选、数据去重
 
 
 
 
row_number()
 
 
 
 
序号唯一,精准定位单条记录
 
 
 
 
竞争排名、奖项分配
 
 
 
 
rank()
 
 
 
 
并列排名 + 跳过空缺,符合认知
 
 
 
 
层级划分、连续排名
 
 
 
 
dense_rank()
 
 
 
 
并列排名 + 不跳空缺,层级清晰
 
 
 
 
 
 
 
记住:“唯一用 row,竞争用 rank,层级用 dense”,大部分 SQL 排名场景都能快速匹配到合适的函数!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/978527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二、使用Spring AI实现基于sse协议的MCP Server

二、使用Spring AI实现基于sse协议的MCP Server ================================================================================== =========================================================================…

2025 年电动窗厂家推荐 爱尚爱铝门窗:全链条铝型材解决方案与技术创新实践,适配多场景需求电动提升窗/微型电动提升窗/电动全景推拉门窗/电动天窗厂家推荐

行业背景 随着全球建筑智能化、绿色化趋势的持续深化,电动窗凭借便捷操控、节能降耗、安全稳定等优势,已成为家居装修、商业建筑及工业领域的重要选择。市场对电动窗的性能要求不断升级,不仅聚焦保温隔热、密封隔音…

三、使用Spring AI实现基于stdio协议的MCP Server

三、使用Spring AI实现基于stdio协议的MCP Server ================================================================================== =======================================================================…

DB2数据库关闭归档模式

db2 connect to micsoccdb2 update db cfg using LOGARCHMETH1 offdb2 terminatedb2stop forcedb2start

家长必看!2025-2026申请季A-Level全日制机构排名(6 家头部详解+三大梯队)

2025年A-Level考试正迎来重大变革。继CAIE考试局宣布在中国考区对数学、进阶数学等六大学科启用独立命题后,爱德思考试局也在6月数学P1-P4单元推出专属"区域卷"。两大考试局虽强调此举旨在提升考试安全与公…

国标GB28181算力算法平台EasyGBS视频监控系统在多领域创新应用

在视频监控与物联网高速发展的今天,海量设备接入、视频数据汇聚与智能分析成为了行业数字化的核心挑战。作为遵循国标GB28181协议的核心平台之一,国标GB28181算法算力平台EasyGBS视频智能服务平台早已超越了传统视频…

南昌滑雪场推荐!七星岭国际滑雪场:解锁冬日限定速度与激情

冬天的仪式感,总少不了一场与雪的亲密邂逅。不想远赴东北,又想在银装素裹中尽情撒欢?南昌周边藏着一处宝藏滑雪地 ——七星岭国际滑雪场,驱车2小时就能抵达,无需长途跋涉,就能解锁冬日限定的速度与激情。 一、2小…

体育赛事赋能创新 亚运奥运多维突破

2025-11-27 17:13:57 体育赛事赋能创新 亚运奥运多维突破|@dOd.HrBfUdOnG.cN@||@dOe.hRbFuDoNg.Cn@||@dOf.HrBfUdOnG.cN@||@dOg.hRbFuDoNg.Cn@||@dOh.HrBfUdOnG.cN@||@dOi.hRbFuDoNg.Cn@||@dUl.ShEnGYuAnRaCkS.cOm@||@…

2025 年 11 月铁盒厂家推荐排行榜,食品铁盒/保健品铁盒/化妆品铁盒/茶叶铁盒/磁吸铁盒/异形铁盒,精选耐用设计与定制工艺之选

2025 年 11 月铁盒厂家推荐排行榜,食品铁盒/保健品铁盒/化妆品铁盒/茶叶铁盒/磁吸铁盒/异形铁盒,精选耐用设计与定制工艺之选 在当今包装产业中,铁盒凭借其出色的密封性、耐用性和环保特性,已成为食品、保健品、化…

2025年下半年冷再生机租赁/水泥板破碎机出租公司前五推荐

随着2025年下半年基建行业的持续发展,冷再生机租赁市场呈现蓬勃态势。本文基于行业调研数据,为工程承包商和施工企业提供五家值得考虑的冷再生机租赁服务商推荐榜单。排名不分先后,仅作参考选择,其中江苏环硕建设有…

详细介绍:【Linux权限 (二)】Linux权限机制深度解析:umask如何决定默认权限与粘滞位的妙用

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

SAT提分哪家强?2025杭州/上海6大顶尖机构测评,锁定名校offer

2025年美本、加本及新加坡本科申请季已进入关键冲刺阶段,一份具有竞争力的SAT成绩单,正是杭州、上海学子在万级申请者中脱颖而出的核心筹码。作为长三角留学申请核心城市,杭州、上海的SAT培训市场机构林立,但质量参…

2025年如何选择优质的火锅桌生产厂家?

在选择合适的现代轻奢风火锅桌生产厂家时,首先需要明确自身的需求,包括风格、尺寸和功能等。厂家提供的设计方案与材料选择应符合现代轻奢风格,展示出细腻与高端感。同时,评估厂家的技术实力和生产规范也十分关键,…

2025 年 11 月留香阁食品推荐排行榜,预制菜/调理半成品/咀留香/黑椒牛排,精选优质食材与创新工艺,满足便捷餐饮与家庭烹饪的多重需求!

2025 年 11 月留香阁食品推荐排行榜:预制菜与调理半成品行业深度解析 行业背景与发展趋势 预制菜与调理半成品行业近年来呈现爆发式增长态势,这背后反映了现代生活节奏加快与消费升级的双重驱动。随着城市化进程加速…

多元体育竞技优化 赛事亚运奥运实战赋能

2025-11-27 16:41:18 多元体育竞技优化 赛事亚运奥运实战赋能|@dEt.SpRiNg-YoUnG.cOm@||@dEu.sPrInG-YoUnG.COM@||@dEv.SpRiNg-YoUnG.cOm@||@dEw.sPrInG-YoUnG.COM@||@dEx.SpRiNg-YoUnG.cOm@||@dEy.sPrInG-YoUnG.COM@|…

拥抱现代:C++ 的蜕变与核心特性概览

自 C++11 标准发布以来,C++ 语言经历了一场深刻的变革,被称为“现代 C++”(Modern C++)。这不仅仅是简单的语法更新,更是对语言设计理念的重大升级,旨在提高代码的安全性、可读性、性能和开发效率。 现代 C++(通…

最新育儿必看,婴幼儿特应性皮炎推荐什么护肤品?纽强屏障修复专业守护

一、揪心的数据:婴幼儿特应性皮炎的隐形困扰 我国1-7岁儿童特应性皮炎发病率已攀升至12.94%,每10个宝宝中就有1个正遭受皮肤干燥、红斑、剧烈瘙痒的折磨。这种慢性复发性皮肤问题的核心症结,在于宝宝皮肤屏障功能异…

quic协议监听与Alt-Svc响应头的应用

本文分享自天翼云开发者社区《quic协议监听与Alt-Svc响应头的应用》.作者:沈****扬 QUIC是快速UDP网络连接(英语:Quick UDP Internet Connections)的缩写,是一种基于UDP协议实现的应用层可靠传输协议。目前已经被…

全球前四!京东云云海AI存储跻身IO500高性能存储榜单

近日,在最新公布的 IO500 排行榜中,京东云云海 AI 存储基于通用 NVMe 盘存储服务器,结合全栈自研软件体系与深度调优,成功跻身 IO500 生产榜单全球前四、国产自研第一。相较传统超算存储技术,云海AI存储不采用 PM…

2025 年 11 月电动伸缩门厂家权威推荐榜:悬浮门/空降闸/工业伸缩门,智能防护与耐用品质全景解析

2025 年 11 月电动伸缩门厂家权威推荐榜:悬浮门/空降闸/工业伸缩门,智能防护与耐用品质全景解析 随着城市化进程加速和智慧安防需求升级,电动伸缩门、悬浮门、空降闸及工业伸缩门作为现代出入口管理的核心设备,正迎…