我正在尝试插入一个值并计算我插入到一列中的值。
这个例子,基本上我有一张有3列的表,id
,amount
,total
:
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());
可以累积负值吗?和, 任何人都可以纠正我的查询?谢谢
答案 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();