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

Hai*_*vgi 6 mysql group-by

我有一张桌子:

id      |    name    |  profit |  cost  
---------------------------------------
1       |  aaa       | 4       | 2 
2       |  aaa       | 4       | 3 
3       |  aaa       | 4       | 2 
4       |  bbb       | 4       | 1 
Run Code Online (Sandbox Code Playgroud)

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

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

id      |    name    |  profit |  cost  
---------------------------------------
1       |  aaa       | 12      | 7 
4       |  bbb       | 4       | 1 
Run Code Online (Sandbox Code Playgroud)

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

val*_*lex 1

SQLFiddle 演示

首先更新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;
Run Code Online (Sandbox Code Playgroud)

然后删除行,除了那些带有min(id)for every 的行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
Run Code Online (Sandbox Code Playgroud)