我们使用以下查询计算了排名。
set @rank = 0;
Update rank_table
set position= (select @rank := @rank + 1)
order by points DESC, points_new DESC, points_old DESC;
并依次计算排名。
例如。
我希望具有相同标准的 id 应该分配相同的排名。 所以可以说, 这里 id 1 和 2 具有相同的标准,然后应该有 position=1,然后 id 3 应该有 position=3。 不像电流。 当前 -> Id 1:position 1 , Id 2:position 2 , Id 3:position 3 但由于 Id 1 和 2 具有相同的数据,因此应该是..
Id 1:位置 1 , Id 2:位置 1 , Id 3:位置 3
感谢您的帮助。
最佳答案
从技术上讲,您想要的是 rank()
而不是 row_number()
。这有点痛苦,但有可能:
set @rn := 0;
set @rank := 0;
set @p := -1;
Update rank_table
set position = if(@rn := @rn + 1,
if(@p = points, @rank,
if(@p := points, @rank := @rn, @rank := @rn)
),
NULL -- never should happen
)
order by points DESC, points_new DESC, points_old DESC;
这很棘手,因为您需要同时计算排名和行号——排名保持不变,然后它必须“跳转”到行号。
关于php - 使用更新查询计算mysql中的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33566478/