0

我有这样的表:

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 的重复值保存在另一个表中:)

4

5 回答 5

2

您需要使用合适的聚合函数对表进行分组SUM()(我在下面使用,但您可能想要使用MAX()或其他东西,具体取决于您的要求):

SELECT   q, SUM(A) A, SUM(B) B
FROM     my_table
GROUP BY q

sqlfiddle上查看。

于 2013-07-19T09:31:40.747 回答
0
ALTER IGNORE TABLE yourtable ADD UNIQUE INDEX idx_name (q, a, b);
于 2013-07-19T09:31:23.310 回答
0

要更新表,请尝试使用自联接更新:

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;

看到这个 SQLFiddle

于 2013-07-19T09:34:54.680 回答
0

ALTER IGNORE TABLE tab_name 添加唯一索引 idx (q,a,b);

这将删除所有重复的行。作为一个额外的好处,未来的重复插入将出错。

于 2013-07-19T09:36:03.917 回答
0

这是一个多步骤操作,但它给出了您要求的确切结果

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;

sql小提琴

于 2013-07-19T09:38:48.100 回答