mysql数据库中的简单排行榜排名

mysql数据库中的简单排行榜排名,mysql,sql,sql-order-by,common-table-expression,leaderboard,Mysql,Sql,Sql Order By,Common Table Expression,Leaderboard,我正在制作一个简单的游戏,我想制作一个用户可以查看的迷你排行榜。排行榜将由用户、总分高于他的5名玩家和总分低于他的5名玩家组成。我如何进行MySQL查询以返回这些用户 例如:在下表中,当用户的id为8时,我想返回Lea、Joshua、Pete(因为在本例中没有5个在他之上)、John、Bert、Maxi、Max、Anna的玩家(以及他们的分数) id| name | points 1 Max 20 2 anna 10 3 bert 30 4 m

我正在制作一个简单的游戏,我想制作一个用户可以查看的迷你排行榜。排行榜将由用户、总分高于他的5名玩家和总分低于他的5名玩家组成。我如何进行MySQL查询以返回这些用户

例如:在下表中,当用户的id为8时,我想返回Lea、Joshua、Pete(因为在本例中没有5个在他之上)、John、Bert、Maxi、Max、Anna的玩家(以及他们的分数)

id| name |   points
1   Max       20
2   anna      10
3   bert      30
4   maxi      30
5   lea       100
6   lei       10
7   joshua    90
8   Pete      50
9   John      40

如果您正在运行MySQL 8.0,则可以使用
行数()
和一个公共表表达式:

with cte as (
    select t.*, row_number() over(order by points) rn
    from mytable t
)
select c.id, c.name, c.points
from cte c
inner join (select rn from cte where id = 8) r
    on c.rn between r.rn - 5 and r.rn + 5