删除重复行并将删除的行值添加到剩余的行中

时间:2013-11-14 12:38:30

标签: mysql group-by

我有一张表:

id      |    name    |  profit |  cost  
---------------------------------------
1       |  aaa       | 4       | 2 
2       |  aaa       | 4       | 3 
3       |  aaa       | 4       | 2 
4       |  bbb       | 4       | 1 

我想从这个表中删除重复的行(根据名称) 但在删除之前将已删除行的值添加到剩余行

所以在这种情况下,我希望运行查询后的表看起来像:

id      |    name    |  profit |  cost  
---------------------------------------
1       |  aaa       | 12      | 7 
4       |  bbb       | 4       | 1 

是否可以在mysql中执行此操作,而无需创建另一个表并复制数据,因为这是一个大表(100万行,但每天都在增加)?

1 个答案:

答案 0 :(得分:1)

SQLFiddle demo

首先为每个min(id)

更新NAME
UPDATE T a JOIN 
(
  SELECT min(ID) as minID,name,SUM(profit) as SP,SUM(cost) as SC 
  FROM T GROUP BY name
) b 
 ON a.id = b.minID 
 SET a.profit = b.sp,a.cost=b.sc;

然后删除除min(id)

每个NAME行的行外的行
DELETE T
FROM T
LEFT JOIN 
(
  SELECT min(ID) minid ,name FROM T GROUP BY name
) b  
ON t.id = b.minid
WHERE b.minid is NULL