2015-07-21 121 views
1

我有一張表,我需要添加一個增量列,但增量應基於其他列中的現有值進行。基於其他列值的唯一性增加列值

select * from mytable; 

first_col second_col 
    A    B 
    A    C 
    A    D 
    A    E 
    A    B 
    A    D 

現在,我想補充另一列說NEW_COLUMN其值唯一的first_col和second_col的基礎上遞增。

一欄應填寫這樣的:

first_col second_col new_col 
    A    B   1 
    A    C   1 
    A    D   1 
    A    E   1 
    A    B   2 
    A    D   2 
    A    B   3 

是否有可能做到這一點使用內置自動遞增策略某種的的MySQL。

回答

0

沒有內置在MySQL的增量法,但你可與相關子查詢或變量做到這一點:

select t.*, 
     (@rn := if(@c = concat(first_col, ':', second_col), @rn + 1, 
        @c := concat(first_col, ':', second_col), 1, 1 
       ) 
     ) as new_col 
from mytable t cross join 
    (select @rn := 0, @c := '') params 
order by first_col, second_col; 

注:此重新排序的結果。如果你想以原始順序得到結果,那麼你需要一個指定排序的列。

0

下面介紹如何做到這一點,用要插入的值替換col1valcol2val

INSERT INTO mytable (first_col, second_col, new_col) 
VALUES (SELECT col1val, col2val SUM(COUNT(*), 1) 
     FROM mytable 
     GROUP BY first_col, second_col 
     HAVING first_col = col1val AND second_col = col2val) 

請注意,這是一個插入查詢,只會影響新插入的值。

+0

這將更新新列僅包括一個再寄一次的值要我可能會保持持續的新行和新列自動提取值。 – LearningToDesign

1

使用臨時表與auto_incremented ID列,你可以做

create temporary table tt (
    id int auto_increment primary key, 
    col1 varchar(32),col2 varchar(32)); 

insert into tt 
select col1, col2 from origtable; 

select col1, col2, 
    (select count(*)+1 from tt s 
    where s.col1=m.col1 and s.col2=m.col2 
    and s.id<m.id) n 
frm tt m 
+0

謝謝。這似乎是一個更標準的方法。只有這樣,我不會讓序列生成器表不是臨時的。 – LearningToDesign