MySQL-为得分相同的用户分配相同的排名
我之前问过一个问题,关于从玩家列表中生成一个排名表,其中包含前3名的分数,以及登录用户的分数。查询如下所示:MySQL-为得分相同的用户分配相同的排名,mysql,Mysql,我之前问过一个问题,关于从玩家列表中生成一个排名表,其中包含前3名的分数,以及登录用户的分数。查询如下所示: SELECT * FROM ( SELECT a.* , @rank := @rank+1 rank FROM users a JOIN (SELECT @rank:=0) vars ORDER BY highscore DESC , userid
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;
我能想到的与你的答案最接近的解决方案如下
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;
这里的函数用于聚合有序字符串中的所有高分,然后使用该函数,我们可以从所选聚合结果中找到所需分数的位置。尝试以下操作:
SELECT *,
(SELECT COUNT(DISTINCT highscore) FROM my_table r
WHERE s.highscore<=r.highscore) as rank
FROM my_table s
order by rank ASC
这取决于你,但我认为像这样储存领带更常见:1,1,3,4,4,4,7
SELECT *,
(SELECT COUNT(DISTINCT highscore) FROM my_table r
WHERE s.highscore<=r.highscore) as rank
FROM my_table s
order by rank ASC