1

我不是一个经常使用 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;

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

谢谢 !

4

2 回答 2

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 错误 1093 - Can't specify target table for update in FROM 子句

于 2013-10-18T11:16:41.167 回答
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 
于 2013-10-18T11:07:36.333 回答