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 获取行号的主要内容,如果未能解决你的问题,请参考以下文章