MYSQL 5.7 获取行号

Posted

技术标签:

【中文标题】MYSQL 5.7 获取行号【英文标题】:MYSQL 5.7 Getting the row number 【发布时间】:2019-01-17 16:05:45 【问题描述】:

我有一个名为“playerrank”的数据库,其中包含点数列。我想在人们的个人资料页面上显示他们的排名,如下所示:

排名:3/1456

我尝试使用 ROW_NUMBER(),但似乎我的主机版本较低(我相信是 5.7)。它给了我错误。

除了按点 desc 排序 db 并以某种方式获取行号之外,我还有其他方法可以根据点数获得玩家的排名吗?

【问题讨论】:

搜索mysql行号模拟。 积分相同的玩家是否需要相同的段位?如果是这样,您需要模拟DENSE_RANK(),这在 8.0 以下的 MySQL 版本中更难使用用户变量然后ROW_NUMBER() 不,他们不必是同一等级 这很容易但很慢。提示:玩家等级 = 1 + 在某些情况下“低于”它的玩家数量。这产生与 RANK() 相同的结果。 DENSE_RANK()... 留作练习。 【参考方案1】:

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

SET @row_number = 0;

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

请注意,从技术上讲,行号与排名不同,但我怀疑您确实需要此处的行号。在这种情况下,如果假设三位玩家得分相同,他们可能会分配不同的排名编号。

【讨论】:

【参考方案2】:

在 MySQL 5.7 中,在单个查询中

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

【讨论】:

以上是关于MYSQL 5.7 获取行号的主要内容,如果未能解决你的问题,请参考以下文章

mysql获取行号

MYSQL行号

mysql 中关于获取行号@rownum:=@rownum+1

Mysql获取目标行号±2行

使用百分比选择(LIMIT X,1)获取行号的最快方法?

使用 Pivot 在 MySQL 8.0.17 版中从不同表和不同行号(联合)进行行到列转换