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

如何通过SQL直接查询指定玩家在排序结果列表中的排名索引

玩家排名查询SQL实现方案

方案1:支持窗口函数的数据库(MySQL 8.0+/MariaDB 10.2+等,推荐)

直接使用ROW_NUMBER()窗口函数按你指定的排序规则生成排名,再筛选目标用户即可,性能最优:

-- 查找指定用户ID对应的排名
WITH ranked_player_list AS (
    SELECT
        u.id,
        ROW_NUMBER() OVER (
            ORDER BY u.total_prestige DESC, u.total_level DESC, u.total_xp DESC, s.created ASC
        ) AS rank
    FROM hs_users u
    INNER JOIN hs_userskill s ON u.id = s.userId
    WHERE s.id = (SELECT MAX(id) FROM hs_userskill WHERE userId = u.id)
)
SELECT rank FROM ranked_player_list WHERE id = 目标用户ID;

说明:这里把原查询的IN子查询换成了等值匹配,逻辑等价,执行效率更高。

方案2:低版本数据库(不支持窗口函数)

使用用户变量迭代计算排名:

SELECT rank FROM (
    SELECT
        u.id,
        @cur_rank := @cur_rank + 1 AS rank
    FROM hs_users u
    INNER JOIN hs_userskill s ON u.id = s.userId
    CROSS JOIN (SELECT @cur_rank := 0) AS var_init
    WHERE s.id = (SELECT MAX(id) FROM hs_userskill WHERE userId = u.id)
    ORDER BY u.total_prestige DESC, u.total_level DESC, u.total_xp DESC, s.created ASC
) AS ranked_result
WHERE id = 目标用户ID;

性能优化建议

  • 可给hs_users表添加联合索引idx_rank_sort(total_prestige DESC, total_level DESC, total_xp DESC),大幅降低排序开销
  • hs_userskill表的userId字段已有外键关联索引,无需额外添加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:18:04