0

0

SQL 如何实现排行榜并处理并列名次?

冷漠man

冷漠man

发布时间:2026-01-21 20:50:37

|

980人浏览过

|

来源于php中文网

原创

排行榜应优先使用DENSE_RANK()实现并列不跳位,如95分两人并列第1、90分排第2;RANK()用于并列跳位(如奥运奖牌榜,95分并列第1后直接第3);分组排名需加PARTITION BY,如按班级独立排序。

sql 如何实现排行榜并处理并列名次?

SQL 实现排行榜并正确处理并列名次,关键在于选择合适的窗口函数:用 RANK() 处理“并列跳位”,用 DENSE_RANK() 处理“并列不跳位”,用 ROW_NUMBER() 则完全不并列。实际业务中,大多数排行榜(如积分榜、销量榜)倾向使用 DENSE_RANK(),因为它更符合用户对“第几名”的直观理解。

用 DENSE_RANK() 实现并列不跳位的排行榜

当多名用户分数相同时,他们应共享同一排名,后续名次紧接其后(例如:95分两人并列第1,90分就排第2,而非第3)。这是最常用的并列逻辑。

  • 语法简洁:DENSE_RANK() OVER (ORDER BY score DESC)
  • 按 score 降序排列,相同 score 得到相同 rank,且无空缺
  • 示例:数据为 (A,95), (B,95), (C,90), (D,85) → 排名结果为 1,1,2,3

用 RANK() 实现并列跳位(传统体育式排名)

适合强调“名次段落”的场景,比如奥运奖牌榜:两个第1名后,下一个有效名次是第3名(跳过第2名)。

拍我AI
拍我AI

AI视频生成平台PixVerse的国内版本

下载
  • 语法类似:RANK() OVER (ORDER BY score DESC)
  • 相同 score 得相同 rank,但会跳过被占用的后续名次数值
  • 同上示例 → 排名结果为 1,1,3,4
  • 注意:若需限制只取前10名,RANK() 可能返回超过10行(因并列导致 rank=10 对应多条记录)

如何分组内独立排行(如各班级内部排名)

排行榜常需“分组计算”,比如每个班级单独排成绩名次。只需在窗口函数中加入 PARTITION BY

  • 写法:DENSE_RANK() OVER (PARTITION BY class_id ORDER BY score DESC)
  • class_id 相同的数据被划为一组,每组内独立排序、独立编号
  • 支持多级排序,例如先按班级,再按性别,再按分数:PARTITION BY class_id, gender ORDER BY score DESC

补充:兼容旧版本 MySQL(

MySQL 5.7 及更早不支持窗口函数,可用变量或自连接模拟 DENSE_RANK(),但性能差、逻辑易错,仅作临时过渡。

  • 推荐升级至 MySQL 8.0+,直接使用标准窗口函数
  • 若必须兼容,核心思路是:先去重排序得到唯一分数列表,再关联原表匹配名次
  • 例如:SELECT t1.name, t1.score, COUNT(DISTINCT t2.score) + 1 AS rank FROM scores t1 LEFT JOIN scores t2 ON t2.score > t1.score GROUP BY t1.name, t1.score ORDER BY rank;

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

683

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

323

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

348

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1096

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

358

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

697

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

577

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

418

2024.04.29

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 805人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号