在Postgres上插入值时如何添加特定列

时间:2019-02-03 08:00:22

标签: sql postgresql insert

我正在尝试插入一个值并计算我插入到一列中的值。

这个例子,基本上我有一张有3列的表,idamounttotal

id | amount | total
1 | 100 | 100 
2 | 200 | 300
3 | -100 | 200

预期结果:

每次输入新的amount值时,我都希望将列total中的值与该值相加

INSERT INTO public.tb_total_amount
(id, amount, total, create_time)
VALUES(1, 100, balance+amount, NOW());

可以累积负值吗?和, 任何人都可以纠正我的查询?谢谢

1 个答案:

答案 0 :(得分:1)

我建议您不要这样做,而建议您仅使用SUM作为分析函数:

SELECT
    id,
    amount,
    SUM(amount) OVER (ORDER BY id) total
FROM yourTable;

此答案背后的逻辑是,滚动总和total是衍生数据,而不是原始数据。因此,最好是在需要时即时计算它,而不是存储它。

如果您真的想在一次插入过程中插入正确的总数,则可以尝试:

INSERT INTO public.tb_total_amount (amount, total, create_time)
SELECT
    100,
    (SELECT COALESCE(amount, 0) FROM public.tb_total_amount
     ORDER BY id DESC LIMIT 1) + 100,
    NOW();