我有一张桌子:
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万行,但每天增加)?
首先更新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)
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |