我不是一个经常使用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;
我正在寻找的是一种自动填充色谱柱的方法。
谢谢!
答案 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