You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询包含并列重复值的前N个最高值的实现方法

MySQL并列排名前3记录查询方案

要实现带并列保留的前3排名查询,核心是按分数档位排名而非按数据行排名,同分数会被划分到同一个排名档位,所有符合前3档位的记录都会被返回,以下是两种常用实现方式:

方案1:MySQL 8.0及以上版本(支持窗口函数)

使用DENSE_RANK()窗口函数实现,该函数特性为并列排名不会跳号,完全匹配需求:

WITH ranked_scores AS (
    SELECT 
        Names,
        Marks,
        DENSE_RANK() OVER (ORDER BY Marks DESC) AS rank_num
    FROM 替换为你的实际表名
)
SELECT Names, Marks 
FROM ranked_scores 
WHERE rank_num <= 3
ORDER BY Marks DESC;

逻辑说明:示例数据中60分排名第1、55分排名第2、50分排名第3、20分排名第4,筛选rank_num<=3即可得到所有符合要求的记录,并列分数自动全部保留。

方案2:MySQL 5.x及更低版本(不支持窗口函数)

通过子查询统计高位不同分数数量实现:

SELECT t1.Names, t1.Marks
FROM 替换为你的实际表名 t1
WHERE (SELECT COUNT(DISTINCT t2.Marks) FROM 替换为你的实际表名 t2 WHERE t2.Marks > t1.Marks) < 3
ORDER BY t1.Marks DESC;

逻辑说明:统计比当前记录分数更高的不同分数的数量,小于3即代表当前分数属于前3个档位,自然包含所有并列记录。

内容的提问来源于stack exchange,提问作者Gops61

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:39:01