0

我有一个包含这两列的表

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

我尝试了 distinctposition和 group by position,但都删除了重复项,但我希望将它们分组为行集,以便出现第一个副本,然后出现第二个重复的行等。有什么建议或帮助实现它吗?

4

1 回答 1

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
于 2013-07-03T01:33:23.493 回答