使用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
答案 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
我同意其他建议,在应用程序级别这样做会更好。