每个名称的Mysql计数重置每个名称更改

时间:2014-05-13 20:18:42

标签: mysql count

我有一个包含条目名称,日期等的表。

select name from names
order by names

例如。

我需要像

这样的输出
1|paul
2|paul
1|morne
1|marone
2|marone
3|marone

我不知道从哪里开始做这样的计数,因为我无法做到这一点。

1 个答案:

答案 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语句中表达式的求值顺序没有问题。