增加每组ID的数字

时间:2015-08-31 14:34:26

标签: mysql sql

下表列出了我在表格中的数据。

+----+------+
| ID | Year |
+----+------+
|  1 | 2005 |
|  1 | 2006 |
|  2 | 2005 |
|  2 | 2007 |
|  2 | 2008 |
|  3 | 2005 |
|  4 | 2009 |
+----+------+

我想写一个查询,它将显示以下结果。

+----+----+------+
| ID |auto| Year |
+----+----+------+
|  1 |  1 | 2005 |
|  1 |  2 | 2006 |
|  2 |  1 | 2005 |
|  2 |  2 | 2007 |
|  2 |  3 | 2008 |
|  3 |  1 | 2005 |
|  4 |  1 | 2009 |
+----+----+------+

如您所见,auto字段将为每个ID显示增量自动编号。

2 个答案:

答案 0 :(得分:3)

在MySQL中执行此操作的最佳方法是使用变量。但是,如果使用变量,则所有赋值都需要在同一个表达式中,因为MySQL不保证SELECT中表达式的求值顺序。

所以我建议:

select id, 
       (@rn := if(@i = id, @rn + 1,
                  if(@i := id, 1, 1)
                 )
       ) as auto,
       year
from tableX cross join
     (select @i := -1, @rn := 0) params
order by id, year;

答案 1 :(得分:0)

devDependencies