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

如何在MySQL查询中使用FIND_IN_SET实现列求和并生成排名

解决方案

可直接运行的实现语句如下:

SELECT 
    a.id_user,
    a.total,
    FIND_IN_SET(a.total, b.sorted_total) AS `rank`
FROM 
    (
        -- 计算每个用户play类型的总积分
        SELECT id_user, SUM(score) AS total 
        FROM result 
        WHERE type = 'play' 
        GROUP BY id_user
    ) AS a,
    (
        -- 生成按总积分降序排列的逗号分隔字符串
        SELECT GROUP_CONCAT(total ORDER BY total DESC) AS sorted_total 
        FROM (
            SELECT SUM(score) AS total 
            FROM result 
            WHERE type = 'play' 
            GROUP BY id_user
        ) AS t
    ) AS b
ORDER BY `rank` ASC;

补充说明

  • 上述实现的排名逻辑和原生RANK()窗口函数完全一致:同分数用户排名相同,后续排名会自动跳空(例如两个用户总积分均为70分,排名均为1,下一个20分的用户排名为3),符合预期需求。
  • 如果查询涉及的用户量较大,需要先执行以下语句避免GROUP_CONCAT结果被默认长度限制截断:
SET SESSION group_concat_max_len = 1000000;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:09:03