【问题标题】:Getting the user's position in the leaderboard获取用户在排行榜中的位置
【发布时间】:2020-11-25 10:36:29
【问题描述】:

查询停止工作(获取用户在排行榜中的位置):

SELECT 
        `rank`, `uid`, `battleWinScore` 
        FROM
            (SELECT 
             @rank:=@rank+1 AS `rank`, `uid`, `battleWinScore` 
             FROM
             `rating`, (SELECT @rank := 0) r 
             ORDER BY `battleWinScore` DESC 
            ) t 
        WHERE uid = 572;
        

在评分表中,我们需要通过字段battleWinScore获取用户的位置。 我绝对不擅长mysql。帮助 =)

【问题讨论】:

  • 请提供您的表格结构和示例数据,任何人都会对您有所帮助
  • 你的 MySQL 版本是什么?
  • 你模拟的是 ROW_NUMBER,而不是 RANK。
  • 您的查询看起来有效:sqlize.online/…
  • 感谢所有回复的人!建议的解决方案有所帮助。

标签: mysql sql subquery where-clause


【解决方案1】:

如果您运行的是 MySQL 8.0,只需使用 row_number()(或 rank(),如果您想始终允许绑定)。

select *
from (
    select uid, battleWinScore, rank() over(order by battleWinScore desc) rn
    from rating
) r
where uid = 572

在早期版本中,我建议使用相关子查询而不是用户变量:

select uid, battleWinScore
    (select count(*) + 1 from rating r1 where r1.battleWinScore > r.battleWinScore) as rn
from rating r
where uid = 572

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 2021-08-11
    相关资源
    最近更新 更多