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 - 更新表,以便在给定另一列的键的情况下对一列求和的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL:使用来自同一表的另一列的数据更新表

根据MySQL中另一列分组的另一列的顺序更新列

来自一列的 SQL UPDATE 数据与来自另一列的匹配

mysql如何根据一列值更新另一列的值?

更新另一列时,使用列名作为 PL/SQL 关联数组的键

SQL - 为给定列中的值获取另一列的值