【问题标题】:SQL - Updating a table, such that a column is summed given another column's keySQL - 更新表,以便在给定另一列的键的情况下对一列求和
【发布时间】: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。

谢谢

【问题讨论】:

    标签: sql postgresql


    【解决方案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';
      

      【讨论】:

        猜你喜欢
        • 2011-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 2011-03-16
        • 1970-01-01
        • 2012-01-24
        相关资源
        最近更新 更多