我有一个包含条目名称,日期等的表。
select name from names
order by names
例如。
我需要像
这样的输出1|paul
2|paul
1|morne
1|marone
2|marone
3|marone
我不知道从哪里开始做这样的计数,因为我无法做到这一点。
答案 0 :(得分:0)
在MySQL中,最简单的方法是使用变量:
select n.name,
(@rn := if(@name = name, @rn + 1, 1)) as seqnum,
@name := name
from names n cross join
(select @name := '', @rn := 0) var
order by names;
编辑:
如果有人遇到这个答案,上面的排序工作,但MySQL并不保证表达式的评估顺序。所以,我现在写上面的内容:
select n.name,
(@rn := if(@name = name, @rn + 1,
if(@name := name, 1, 1)
)
) as seqnum
from names n cross join
(select @name := '', @rn := 0) var
order by names;
因为所有变量赋值都在一个语句中,所以select
语句中表达式的求值顺序没有问题。