我有一个包含这两列的表
name | position
_______________
bob | 1
rob | 1
sam | 1
tom | 2
shyam | 2
ram | 2
shah | 3
sara | 3
shiv | 3
rogue | 4
logan | 4
xavier| 4
我需要按不同的position
订购,但不应删除重复项,最终结果必须类似
name | position
_______________
bob | 1
tom | 2
shah | 3
rogue | 4
rob | 1
shyam | 2
sara | 3
logan | 4
sam | 1
ram | 2
shiv | 3
xavier| 4
我尝试了position
以及position
分组,但两者都删除了重复项,但我希望将它们分组为行集,以便第一个副本发生,然后是第二个行重复发生等任何建议或帮助实现它?
答案 0 :(得分:1)
您需要枚举position
的每个值中的行。然后你可以用它来订购:
select t.name, t.position
from (select t.*, if(@prev = position, @rn := @rn + 1, 1) as rn,
@prev := position
from t cross join
(select @rn := 0, @prev := -1)
order by position
) t
order by rn