【发布时间】:2018-06-20 22:03:05
【问题描述】:
我在 Postgresql 9.6.5 中有一个表,其中包含以下字段:
CREATE TABLE test (
id SERIAL,
data JSONB,
amount DOUBLE PRECESION,
PRIMARY KEY(id)
);
在data 列中有这样的json对象:
{
"Type": 1,
"CheckClose":
{"Payments":
[
{"Type": 4, "Amount": 2068.07},
{"Type": 1, "Amount": 1421.07}
]
}
}
我需要做的是将Amount 值的总和放入每行的amount 字段Payments 字段和这个data 对象。例如,对于这个特定对象,应该有 2068.07 + 1421.07 = 3489.14。
我已经阅读了一些关于 Postgres json 和 jsonb 函数的东西,所以我现在在这里:
UPDATE test SET amount=sum((jsonb_array_elements(data::jsonb->'CheckClose'->'Payments')->>'Amount')::FLOAT)
这不起作用 - 我收到关于不在 UPDATE 中使用聚合函数的错误。
我尝试这样做:
UPDATE test SET amount=temp.sum
FROM (
SELECT sum((jsonb_array_elements(data::jsonb->'CheckClose'->'Payments')->>'Amount')::FLOAT) AS "sum"
FROM test WHERE id=test.id
) as "temp"
现在我收到一个错误set-valued function called in context that cannot accept a set
我该怎么做?我只需要计算总和并将其放入另一行,这是一项艰巨的任务吗? 请任何人帮助我解决这个问题。谢谢。
【问题讨论】:
标签: sql json postgresql jsonb