添加列并根据条件填充升序号

时间:2016-05-02 06:35:17

标签: mysql sql

鉴于此表

id      secId
 1          2
 2          2
 3          2
 4          1
 5          3
 6          3

我想添加一个新列“sortIndex”并将它的值初始化为每组相等secId的升序int值。 所以结果表是

id      secId       sortIndex
 1          2               1
 2          2               2
 3          2               3
 4          1               1
 5          3               1
 6          3               2

因此,对于每组相等的secId,我有一个新的序列“1,2,3,4,......” 如果有任何机会,单个查询就会很棒。

2 个答案:

答案 0 :(得分:0)

您正在尝试在MySQL中模拟row_number。你需要使用变量。

SET @row_number:=0;
SET @sec_id:='';
SELECT id, @row_number:=CASE WHEN @secid=secid THEN @row_number+1 ELSE 1 END AS row_number, 
@secid:=secid AS secid
FROM your_table
ORDER BY secid;

您可以在

找到更多详情

http://blog.sqlauthority.com/2014/03/09/mysql-reset-row-number-for-each-group-partition-by-row-number/

答案 1 :(得分:0)

提供行号。

检查secId@curRow1的增量是否相同。

<强>查询

select Id,secId,( 
  case secId 
  when @curA
  then @curRow := @curRow + 1 
  else @curRow := 1 and @curA := secId end
) as sort_index
from your_table_name t,
(select @curRow := 0, @curA := '') r
order by Id,secId;

SQL Fiddle Demo