我有一张表:
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万行,但每天都在增加)?
答案 0 :(得分:1)
首先为每个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