SQL - 更新表,以便在给定另一列的键的情况下对一列求和
Posted
技术标签:
【中文标题】SQL - 更新表,以便在给定另一列的键的情况下对一列求和【英文标题】:SQL - Updating a table, such that a column is summed given another column's key 【发布时间】:2011-04-05 15:11:49 【问题描述】:给定一张桌子:
|编号 |价格 |项目 |总计| | 0 | 1.0 |一个 | | | 1 | 1.0 |一个 | | | 2 | 0.1 |乙| | | 3 | 1.0 |乙| | | 4 | 2.1 |乙| | | 5 | 1.0 |一个 | | | 6 | 2.0 | C | |是否有一条 SQL 语句会导致这种情况发生?
|编号 |价格 |项目 |总计| | 0 | 1.0 |一个 | 3.0 | | 1 | 1.0 |一个 | 3.0 | | 2 | 0.1 |乙| 3.1 | | 3 | 1.0 |乙| 3.1 | | 4 | 2.1 |乙| 3.1 | | 5 | 1.0 |一个 | 3.0 | | 6 | 2.0 | C | 2.0 |其中,每件商品都有所有价格的总和。我可以做一个 SELECT ...
SELECT SUM(price), item FROM table GROUP BY item;
但我不知道如何进行更新。 p.s.我正在使用 Postgres。
谢谢
【问题讨论】:
【参考方案1】:创建一个更新聚合行的 AFTER 触发器。
【讨论】:
是的,触发器肯定比我简单的更新命令好。【参考方案2】:感谢您的回答,这让我想了更多。通过使用临时的第二张桌子,我最终能够做我想做的事。
这就是我所做的。
创建测试数据:
CREATE TABLE 测试(id INT PRIMARY KEY, 价格小数, 项目 CHAR(1), 总小数); 插入测试值(0、1.0、'A'、NULL), ( 1, 1.0, 'A', NULL ), ( 2, 0.1, 'B', NULL ), ( 3, 1.0, 'B', NULL ), ( 4, 2.1, 'B', NULL ), ( 5, 1.0, 'A', NULL ), ( 6, 2.0, 'C', NULL );生成临时表:
SELECT SUM(price), item INTO temp_table FROM test GROUP BY item;更新:
UPDATE test SET total = sum FROM temp_table WHERE temp_table.item=test.item;清理:
删除表 temp_table;哪个产量:
select * FROM test ORDER BY id; 编号 |价格 |项目 |全部的 ----+-------+------+------ 0 | 1.0 |一个 | 3.0 1 | 1.0 |一个 | 3.0 2 | 0.1 |乙| 3.2 3 | 1.0 |乙| 3.2 4 | 2.1 |乙| 3.2 5 | 1.0 |一个 | 3.0 6 | 2.0 | C | 2.0 (7 行)【讨论】:
【参考方案3】:UPDATE table SET total = (SELECT SUM(price) FROM test2 WHERE item = 'A' GROUP BY item) WHERE item = 'A';
【讨论】:
以上是关于SQL - 更新表,以便在给定另一列的键的情况下对一列求和的主要内容,如果未能解决你的问题,请参考以下文章