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

MySQL排行榜:获取指定用户前后各2条带排名记录的方法

MySQL 排行榜中心用户前后记录筛选方案

情况1:已存在带rank列的排行榜表

假设你的排行榜表名为leaderboard,直接通过目标用户的排名范围筛选即可:

SELECT user_id, points, rank
FROM leaderboard
WHERE rank BETWEEN (SELECT rank - 2 FROM leaderboard WHERE user_id = 11) 
              AND (SELECT rank + 2 FROM leaderboard WHERE user_id = 11)
ORDER BY rank ASC;

情况2:无rank列,需实时计算排名

如果原始表(假设名为user_points)没有预计算的rank列,用窗口函数RANK()动态生成排名后再筛选:

WITH ranked_users AS (
    SELECT 
        user_id, 
        points, 
        RANK() OVER (ORDER BY points DESC) AS rank
    FROM user_points
)
SELECT user_id, points, rank
FROM ranked_users
WHERE rank BETWEEN (SELECT rank - 2 FROM ranked_users WHERE user_id = 11) 
              AND (SELECT rank + 2 FROM ranked_users WHERE user_id = 11)
ORDER BY rank ASC;

补充说明

  • 上述SQL会精准筛选出目标用户(user_id=11)排名前后各2条记录,加上自身共5条结果,完全匹配预期输出。
  • 如果存在积分相同的用户,可根据需求替换RANK()为DENSE_RANK()(相同积分用户排名相同)或ROW_NUMBER()(相同积分按指定规则分配唯一排名)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:45:37