如何使用金额总计更新postgres表

时间:2019-05-23 07:40:36

标签: postgresql cumsum

我正在使用Postgres。我无法使用正在运行的总数“ Cum_sum”来更新表。

在“ cum_sum”列中,我想用永久列“ Cum_sum”更新表。 “ Cum_sum”是金额的运行总计。

select语句是有效的语句,但是由于UPDATE不适用于窗口函数,因此我无法更新表。

请协助。

SELECT cs3."Date",cs3."Amount",(sum("Amount") over (order by "Date")) as "Cum_sum" from cs3


cs3 Table
Date             Amount          Cum_sum
"2016-04-26"    "10.00000"  "10.00000"
"2016-06-01"    "-10.00000" "0.00000"
"2018-01-23"    "2150.57000"    "2150.57000"
"2018-01-30"    "-2150.57000"   "0.00000"

1 个答案:

答案 0 :(得分:1)

我将在此处使用data-modifying CTE(假设新添加了列Balance):

WITH balance (id, value) AS (
    SELECT id, (sum("Amount") over (order by "Date", id)) FROM cs3
)
UPDATE cs3 SET "Balance" = balance.value FROM balance WHERE cs3.id = balance.id;

在线示例:https://dbfiddle.uk/?rdbms=postgres_11&fiddle=318929ea3bd4d029070558fe9b47f2a3

这也是@Jeremy要求提供主键列的原因,因为我们需要确保正确关联更新值。