2013-11-14 65 views
6

我有一個表,如:(根據名稱) 刪除重複的行和刪除行值添加到一個保持

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

行到底有多大 '非常大' ?它是否需要在一次交易中發生?它是一個現場系統嗎? – Vatev

+0

你真的有相同的ID = 1嗎? – valex

+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 
+0

這與創建另一個表相同。唯一的區別是它將是一個不可見的臨時表。它也慢,因爲你做了兩次。 – Vatev