MySQL中的分段组

时间:2012-01-27 17:46:59

标签: mysql sql group-by

如何在MySQL表中对 连续 数据进行分组,并将其编号存储到额外的列中?

例如:

id, n

1   10
2   10
3   10
4   56
5   10
6   10
7   80
8   12

我想得到这样的东西。请注意,10个中的n列出 两次。

id   n   cnt
 1   10   3
 4   56   1
 5   10   2
 7   80   1
 8   12   1

在没有FUNCTION的情况下,这样做是否可以做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用MySQL变量

select
      min( PreQuery.ID ) as StartIDOfGroup,
      PreQuery.n,
      count(*) as Cnt
   from
      ( select yt.id,
               yt.n,
               @CommonGroup := @CommonGroup + if( @LastNValue = yt.n, 0, 1 ) as Common,
               @LastNValue := yt.n as JustAPlaceholder
           from
              YourTable yt,
              ( select @CommonGroup := 0, @LastNValue := 0 ) SQLVars ) PreQuery
   group by
      PreQuery.n,
      PreQuery.Common
   order by
      StartIDOfGroup