MySQL:连续的订单头寸

时间:2011-05-02 12:18:59

标签: mysql position

使用MySQL我需要使用ORDER BY填充列表中的位置。

我看到这篇文章: mysql-get-row-position-in-order-by

上述帖子(第二个解决方案)的问题在于,当它在列表中遇到相同的值时,位置是相同的,但是下一个记录会出现“间隙”。我希望这些职位是连续的。

假设我有一个这样的列表:

   id   val
    A    3
    B    5 
    C    2
    D    6
    E    1
    F    8
    G    2
    H    6

我想获得一个带有位置列的有序输出:

   id   val        pos
    E    1          1
    C    2          2
    G    2          2
    A    3          3
    B    5          4
    D    6          5
    H    6          5 
    F    8          6

2 个答案:

答案 0 :(得分:1)

这个怎么样:

  SELECT `id`,
         (SELECT COUNT(DISTINCT `val`) + 1
            FROM `table`
           WHERE `val` < `outer`.`val`) AS `pos`,
         `val`
    FROM `table` `outer`
ORDER BY `val`

刚刚从那个线程中接受了我的回答并稍微改了一下。

但正如@reko_t在评论中提到的那样 - 我个人投票赞成用编程语言来做这件事。

答案 1 :(得分:1)

select id,val,
@pos := if(@prev<>val,@pos+1,@pos) as pos,
@prev := val as val
from table,(select @pos:=0,@prev:='') as r order by val 

我同意其他建议,在应用程序级别这样做会更好。