首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -为得分相同的用户分配相同的排名

MySQL -为得分相同的用户分配相同的排名
EN

Stack Overflow用户
提问于 2019-07-22 15:58:07
回答 2查看 361关注 0票数 2

我之前问过this关于从球员列表中生成一个排名表的问题,该表包含前3个分数,加上登录用户的分数。该查询如下所示:

代码语言:javascript
复制
SELECT *
  FROM 
     ( SELECT a.*
            , @rank := @rank+1 rank
         FROM users a
         JOIN (SELECT @rank:=0) vars
        ORDER 
           BY highscore DESC
            , userid 
     ) x
 WHERE name = 'jennie'
    OR rank <= 3
     ORDER 
        BY rank;

由我上一个问题的接受答案提供的This fiddle演示了正在使用的查询。

但是,从技术上讲,该查询提供的rank列的内容是行号,而不是真正的排名-这意味着当两个用户具有相同的分数时,他们将获得不同的排名。我如何给具有相同分数的唯一用户相同的排名-例如,有效的结果将是:

代码语言:javascript
复制
userid  name    highscore   rank
3       harry   50          1
1       james   50          1
0       sam     20          2
4       jenny   7           4
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-22 16:42:05

我能想到的与你的答案最接近的解决方案如下

代码语言:javascript
复制
SELECT a.userid, a.name, a.highscore,
FIND_IN_SET( a.highscore, 
    (SELECT GROUP_CONCAT( highscore ORDER BY highscore DESC) FROM my_table )) AS rank
FROM my_table a;

在这里,GROUP_CONCAT函数用于聚合有序字符串中的所有高分,然后使用FIND_IN_SET函数,我们可以从选定的聚合结果中定位所需分数的位置。

票数 2
EN

Stack Overflow用户

发布于 2019-07-22 16:57:05

试试这个:

代码语言:javascript
复制
SELECT *,
(SELECT COUNT(DISTINCT highscore) FROM my_table r
WHERE s.highscore<=r.highscore) as rank
FROM my_table s
order by rank ASC

https://www.db-fiddle.com/f/nypySJqctEdemBAy3a3mp3/1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57141446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档