mysql 最高分_MySQL-在最高得分列表中排名用户

bd96500e110b49cbb3cd949968f18be7.png

I have a MySQL query that selects the players with the top 3 highest scores in my users table, then creates an extra column where their rank is assigned:

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 ;

Current progress

So, if the table looked like this:

userid name highscore

0 sam 20

1 james 39

2 jack 10

3 harry 46

4 jennie 7

The result of the query would be this:

userid name highscore rank

3 harry 46 1

1 james 39 2

0 sam 20 3

Question

How could I alter this query so it also display's the user and their rank in the list of results? E.g. if $userName = "jenny", how could I return:

userid name highscore rank

3 harry 46 1

1 james 39 2

0 sam 20 3

4 jenny 7 5

Edit: I should mention - I am using MySQL version 5.0.96

解决方案

For versions prior to 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值