MYSQL 5.7获取行号

11
我有一个名为“playerrank”的数据库,其中包含积分列。我想在人们的个人资料页面上显示他们的排名,如下所示:
排名:3/1456
我尝试使用ROW_NUMBER(),但似乎我的主机版本较低(我相信是5.7)。它给我错误。
除了按点数倒序排序并以某种方式获取行号之外,是否还有其他方法可以根据点数获取玩家的排名?

搜索mysql行号模拟。 - P.Salmon
具有相同分数的玩家是否需要相同的排名?如果是这样,您需要模拟DENSE_RANK(),在MySQL 8.0以下版本中使用用户变量比ROW_NUMBER()更难实现。 - Raymond Nijland
不,它们不必是相同的等级。 - Prx
这很简单但速度较慢。提示:玩家的排名=某些条件下比它“低”的玩家数量+1。这将产生与RANK()相同的结果。DENSE_RANK()...留作练习。 - Salman A
2个回答

15

在MySQL 5.7中,可以在一个查询中

SELECT 
    (@row_number := @row_number + 1) AS rnk, points
FROM yourTable,
(SELECT @row_number := 0) AS x
ORDER BY points DESC;

11

在MySQL 5.7中模拟行号的一个选项是使用会话变量:

SET @row_number = 0;

SELECT 
    (@row_number:=@row_number + 1) AS rnk, points
FROM yourTable
ORDER BY points DESC;

请注意,技术上行号并不等同于排名,但我认为您想要的是行号。在这种情况下,如果有三名玩家获得相同数量的点数,则可能会分配不同的排名号码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接