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

MySQL查询:按用户最佳10轮得分总和排序的顶尖玩家列表

顶尖玩家列表的MySQL查询方案

Got it,我来帮你搞定这个顶尖玩家排名的SQL查询!根据你的需求——每个用户取得分最高的10轮分数求和,再按总和降序排序,结合你的表结构(id, idRound, idUser, score,且(idRound, idUser)组合唯一),这里有两种适配不同MySQL版本的方案:

方案一:MySQL 8.0+ (推荐,效率更高)

用窗口函数可以简洁高效地实现需求,代码如下:

SELECT 
    idUser,
    SUM(top_scores.score) AS total_top_10_score
FROM (
    SELECT 
        idUser,
        score,
        -- 按用户分组,组内分数降序排名
        ROW_NUMBER() OVER (PARTITION BY idUser ORDER BY score DESC) AS rank_num
    FROM your_table_name -- 替换成你的实际表名
) AS top_scores
WHERE rank_num <= 10 -- 筛选每个用户前10高的分数
GROUP BY idUser
ORDER BY total_top_10_score DESC;

代码逻辑说明:

  • 内层子查询:通过ROW_NUMBER()窗口函数,给每个用户的所有轮次分数按从高到低的顺序标上排名。比如用户A的最高分对应rank_num=1,次高分对应rank_num=2,以此类推。
  • 外层查询:过滤出每个用户排名前10的分数记录,按用户ID分组求和,最后按总分从高到低排序,得到最终的顶尖玩家列表。

方案二:MySQL 5.x (兼容旧版本)

如果你的MySQL版本低于8.0,不支持窗口函数,可以用子查询的方式实现:

SELECT 
    t1.idUser,
    SUM(t1.score) AS total_top_10_score
FROM your_table_name t1 -- 替换成你的实际表名
WHERE 10 > (
    -- 统计同用户中比当前记录分数更高的轮次数量
    SELECT COUNT(*)
    FROM your_table_name t2
    WHERE t2.idUser = t1.idUser AND t2.score > t1.score
)
GROUP BY t1.idUser
ORDER BY total_top_10_score DESC;

代码逻辑说明:

  • 核心逻辑是:对每条记录,统计同一个用户里分数比它高的轮次数量。如果这个数量小于10,说明这条记录属于该用户得分最高的10轮之一,最后把这些记录分组求和并排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:02:33