mysql - MySQL - 在最高分列表中排名用户
问题描述
我有一个 MySQL 查询,它选择users
表中得分最高的前 3 名球员,然后创建一个额外的列来分配他们的排名:
SELECT s.*, @curRank := @curRank + 1 AS rank
FROM users AS s
JOIN
( SELECT DISTINCT highscore
FROM users
ORDER BY highscore DESC
LIMIT 3
) AS lim
ON s.highscore = lim.highscore
, (SELECT @curRank := 0) r
ORDER BY s.highscore DESC ;
目前的进展
因此,如果表格如下所示:
userid name highscore
0 sam 20
1 james 39
2 jack 10
3 harry 46
4 jennie 7
查询的结果将是这样的:
userid name highscore rank
3 harry 46 1
1 james 39 2
0 sam 20 3
问题
我如何更改此查询,以便它还显示用户及其在结果列表中的排名?例如,如果$userName = "jenny"
,我怎么能返回:
userid name highscore rank
3 harry 46 1
1 james 39 2
0 sam 20 3
4 jenny 7 5 <-- Add this row and skip jack
编辑:我应该提一下 - 我使用的是 MySQL 5.0.96 版
解决方案
对于 8.0 之前的版本...
SELECT *
FROM
( SELECT a.*
, @i := @i+1 i
FROM my_table a
JOIN (SELECT @i:=0) vars
ORDER
BY highscore DESC
, userid
) x
WHERE name = 'jennie'
OR i <= 3
ORDER
BY i;
推荐阅读
- python - 在 B'__new__ 在 Python 中返回 A 类的实例后,如何在 B 类的 __new__() 中调用 A 类的 __init__()?
- php - 使用 web 参数和不带参数进行身份验证
- json - JSON.parse 随着变量类型的变化,如何使用双引号?
- java - How do I attach the enum value to an object, instead of the enum name?
- python - python django prefetch_related 表单集和 inlineformset_factory
- python-3.x - “需要一个类似字节的对象,而不是'str'”通过 POST 请求传递值时出错
- c# - 响应正文写入后,在 CookieAuthenticationEvents.OnValidatePrincipal 中停止请求
- typescript - 引用打字稿接口字段
- javascript - 如何更改对象的类名?
- java - 如何在 Java 中使用反射调用 Kotlin 对象方法?