我正在尝试进行查询,并且我已经在 stackof 上搜索了答案,但没有找到符合我需求的答案。 我有一个名为玩家的表,其中有两列:“昵称”和“分数”。 我使用此查询来获取排名前 5 的玩家:
SELECT nickname, score
FROM player
ORDER BY score DESC LIMIT 5;
我得到了这个答案:
nickname - score:
zod - 30
ciao - 20
jiji - 20
mayina - 20
jon - 0.
现在,我想要获得单个玩家的排名,比如说“jiji”,结果是 3,因为它是列表中的第三个结果。
我尝试了很多查询,例如
SELECT COUNT(*) AS rank
FROM player
WHERE score >= (SELECT score FROM player WHERE nickname = 'jiji')
但对于“jiji”或“ciao”,他们总是返回 4,这是该表中最后获得 20 分的玩家的排名。
我怎样才能得到“jiji”的 3 呢?非常感谢。
最佳答案
试试这个:
SET @rank=0;
SELECT *
FROM (SELECT @rank:=@rank+1, nickname, score
FROM player
ORDER BY score
DESC) AS t
WHERE t.nickname = 'jiji';
关于在比分平局时不稳定的正确评论。为了使其稳定,我们可以将排序改为先按分数再按昵称排序:
SELECT *
FROM (SELECT @rank:=@rank+1, nickname, score
FROM player
ORDER BY score, nickname
DESC) AS t
WHERE t.nickname = 'jiji';
关于mysql - 选择特定玩家的排名sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387469/