我们使用以下查询计算了排名。
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:位置1,Id 2:位置2,Id 3:位置3 但由于Id 1和2具有相同的数据,它应该是..
Id 1:位置1,Id 2:位置1,Id 3:位置3
感谢您的帮助。
答案 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;
这很棘手,因为你需要计算等级和行号 - 等级保持不变然后它必须"跳跃"到行号。