gpt4 book ai didi

MySQL - 在最高分列表中对用户进行排名

转载 作者:可可西里 更新时间:2023-11-01 07:47:29 27 4
gpt4 key购买 nike

我有一个 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;

https://www.db-fiddle.com/f/hYsiCE1bXeTnR2HzoJkKiR/0

关于MySQL - 在最高分列表中对用户进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57139887/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com