mysql - 选择特定玩家的排名sql查询

标签 mysql sql ranking

我正在尝试进行查询,并且我已经在 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/

相关文章:

R中的排名偏好匹配

arrays - 排名和不排名结合约束

php - 如何用 'x' 替换 mysql 列中的某些字符?

mysql - 从 MySQL 表中删除不同的链接

mysql - 从 latitudeDelta 和 longitudeDelta 获取以米/公里为单位的半径

带条件计数和赋值的 Mysql 查询

PHP/SQL 尝试获取状态=某些内容的所有订单号并将订单号放入数组中

php - 使用表单更新 PHP inc 文件

sql - 如何在 SQL Server 中对多个列的值求和

c++ - 如何更新某些子集的排名?