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

MySQL 8以下版本基于分数总和计算跳跃式排名实现问询

你现有代码实现的是稠密排名(即并列后排名连续不跳跃),要实现你需要的跳跃排名效果,调整用户变量逻辑即可,修改后的查询语句如下:

SELECT id, total, name, 
       CASE 
           WHEN @l = total THEN @r 
           ELSE @r := @count + 1 
       END AS rank,
       @l := total,
       @count := @count + 1
FROM (
    SELECT id, name, SUM(score) AS total
    FROM quiz_users
    GROUP BY mobile
    ORDER BY total DESC
) totals, 
(SELECT @r := 0, @l := NULL, @count := 0) vars

实现逻辑说明

  • 新增@count变量累计已处理的总行数,每处理一行自动+1
  • 当遇到和上一条记录分数不同的条目时,直接将排名赋值为当前累计行数+1,自动跳过并列占用的排名位数:例如3条并列第3的记录处理完成后,@count已经累计为5,下一条分数不同的记录排名就会被设置为5+1=6,完全匹配你需要的输出
  • 分数相同的条目保持排名不变,和原有逻辑一致

注意:MySQL低版本中用户变量的赋值按SELECT后字段的书写顺序执行,请保持排名判断逻辑在变量赋值之前,避免出现计算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:45:07