使用更新查询计算mysql中的排名

时间:2015-11-06 12:07:14

标签: php mysql

我们使用以下查询计算了排名。

set @rank = 0;
Update rank_table
     set position= (select @rank := @rank + 1)
     order by points DESC, points_new DESC, points_old DESC;

它按顺序计算排名。

例如。

enter image description here

我希望具有相同标准的id应该分配相同的排名。 所以说, 这里id 1和2有相同的标准,那么应该有position = 1然后id 3应该有position = 3。 不像当前的流量。 目前 - > Id 1:位置1,Id 2:位置2,Id 3:位置3 但由于Id 1和2具有相同的数据,它应该是..

Id 1:位置1,Id 2:位置1,Id 3:位置3

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

您想要的是技术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;

这很棘手,因为你需要计算等级和行号 - 等级保持不变然后它必须"跳跃"到行号。