mysql - 计算值并在列中自动插入

时间:2013-10-18 10:59:27

标签: mysql sql insert sql-update

我不是一个经常使用mysql的用户,但我确实知道足够的命令来完成我的工作。

我有一张表有3个字段的表Unique_Key, Number_cnt, Total_number

表格中填充了唯一的键和数字,但总数保持空白。 Say table看起来像这样。

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;

我正在寻找的是一种自动填充色谱柱的方法。

谢谢!

2 个答案:

答案 0 :(得分:2)

所以,首先我要避免在列名中使用Unique这个词来描述非唯一的数据。

其次,这可以很容易地动态计算(这避免了每次更新/插入单行时必须更新表中的多个记录):

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

答案 1 :(得分: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