我有这样的表:
q A B
1 0 1
1 2 0
2 3 0
2 0 4
我想得到这样的东西:
q A B
1 2 1
1 2 1
2 3 4
2 3 4
然后删除重复的值。知道怎么做吗?如果有帮助,我已将 q 的重复值保存在另一个表中:)
我有这样的表:
q A B
1 0 1
1 2 0
2 3 0
2 0 4
我想得到这样的东西:
q A B
1 2 1
1 2 1
2 3 4
2 3 4
然后删除重复的值。知道怎么做吗?如果有帮助,我已将 q 的重复值保存在另一个表中:)
您需要使用合适的聚合函数对表进行分组SUM()
(我在下面使用,但您可能想要使用MAX()
或其他东西,具体取决于您的要求):
SELECT q, SUM(A) A, SUM(B) B
FROM my_table
GROUP BY q
在sqlfiddle上查看。
ALTER IGNORE TABLE yourtable ADD UNIQUE INDEX idx_name (q, a, b);
要更新表,请尝试使用自联接更新:
UPDATE Table1 t1
JOIN (
SELECT q, MAX(A) A, MAX(B) B FROM Table1 GROUP BY q
) t2
ON t1.q = t2.q
SET t1.A = t2.A, t1.B = t2.B
您可以在选择使用时删除重复项DISTINCT
:
SELECT DISTINCT * FROM Table1;
ALTER IGNORE TABLE tab_name 添加唯一索引 idx (q,a,b);
这将删除所有重复的行。作为一个额外的好处,未来的重复插入将出错。
这是一个多步骤操作,但它给出了您要求的确切结果
create table dude (q int, a int, b int);
insert into dude values
(1, 0, 1),
(1, 2, 0),
(2, 3, 0),
(2, 0, 4);
create table dude_temp
select q, max(a), max(b) from dude group by q;
rename table dude to dude_delete,
dude_temp to dude;
drop table dude_delete;