如何对键/值 JSONB 中的所有值求和(聚合)?

The*_*ger 5 postgresql json postgresql-10

在 Postgres 10 中我有下表:

CREATE TABLE testtable (
    id  int   PRIMARY KEY,
    qty jsonb
);
INSERT INTO testtable (id,qty)
VALUES
  ( 1, '{"2018-08-01": 10, "2018-08-11": 20, "2018-10-23": 30}' ),
  ( 2, '{"2018-08-17": 100, "2018-11-01": 200}' ),
  ( 3, '{"2018-09-03": 1, "2018-09-01": 2, "2018-10-01": 3}' );
Run Code Online (Sandbox Code Playgroud)

有没有一种快速的方法,使用 SQL 返回每个 JSONB 字段的总和,以便结果为:

ID Total
1   60
2   300
3   6
Run Code Online (Sandbox Code Playgroud)

我已经看到使用 UNNEST 和/或替换(/sf/ask/1868972101/)更复杂的可能性。

然而,我希望有更优雅的东西。

The*_*ger 5

尽管搜索了几个小时,我想我在发布后 10 分钟就找到了答案!

包括供其他人参考:

SELECT id, sum(value::float)
FROM testtable
CROSS JOIN LATERAL jsonb_each_text(qty)
GROUP BY id;
Run Code Online (Sandbox Code Playgroud)