sql根据具有重复值的列选择行,但是明确地对它们进行排序

时间:2013-07-03 01:27:56

标签: mysql sql-order-by distinct

我有一个包含这两列的表

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分组,但两者都删除了重复项,但我希望将它们分组为行集,以便第一个副本发生,然后是第二个行重复发生等任何建议或帮助实现它?

1 个答案:

答案 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