2013-10-18 59 views
1

我不是一個頻繁的mysql用戶,但我知道足夠的命令來完成我的工作。mysql - 計算值並自動插入列

我有一個表有3個字段,Unique_Key, Number_cnt, Total_number

表格中填有唯一的密鑰和數字,但總數保持空白。說表看起來像這樣。

A | 10 | NULL 
A | 25 | NULL 
A | 33 | NULL 
B | 13 | NULL 
D | 11 | NULL 
D | 22 | NULL 

是否有sql方式更新最後一列的數據總和由唯一鍵分組的數字。

末表是這樣的:

A | 10 | 68 
A | 25 | 68 
A | 33 | 68 
B | 13 | 13 
D | 11 | 33 
D | 22 | 33 

我不知道查詢產生的結果

select unique_key,sum(number_cnt) from mTable group by unique_key; 

我所尋找的是一個方法來自動填充柱。

謝謝!

+0

更新,然後通過第一列的選定組加入它 – zxc

+3

通常不是一個好主意,用於存儲可以「即時」計算的數據, – Strawberry

回答

2

所以,首先我會避免使用獨特的單詞列名描述數據是不是唯一的。

其次,這可能與運行中容易地計算(這避免了在表中的每個更新時間更新多條記錄/插入單行):

SELECT a.Unique_Key, Number_cnt, Total_number 
FROM mTable AS a 
LEFT JOIN (
    SELECT Unique_Key, sum(Number_cnt) AS Total_number 
    FROM mTable 
    GROUP BY Unique_Key 
) AS b ON a.Unique_Key= b.Unique_Key 

最後,如果你確實需要做的這下面的查詢應該工作:

UPDATE mTable AS a 
INNER JOIN (
    SELECT Unique_Key, SUM(Number_cnt) as sum_count 
    FROM mTable GROUP BY Unique_Key) AS b 
ON a.Unique_Key=b.Unique_Key 
SET a.Total_number=sum_count 

(where子句中使用原始表,在一些其他的答案建議,將拋出1093錯誤 - 見MySQL Error 1093 - Can't specify target table for update in FROM clause

0

測試工作:

UPDATE mTable AS t1 
INNER JOIN (
    SELECT Unique_Key, SUM(Number_cnt) AS Sum_count 
    FROM mTable 
    GROUP BY Unique_Key) AS t2 
ON (t1.Unique_Key = t2.Unique_Key) 
SET t1.Total_number = Sum_count