我在PostgreSQL中有一个下一个表。如何为result
json-field的每个子字段获取SUM?
┌────┬───────────┬────────────────────────────────────┐
│ id │ parent_id | result │
├────┼───────────┼────────────────────────────────────┤
│ 1 │ 1 | {"step_1":1,"step_2":2,"step_3":3} │
│ 2 │ 1 | {"step_1":5,"step_4":10} │
│ 3 │ 1 | {"step_2":10,"step_3":30} │
│ 4 │ 2 | {"step_1":1,"step_6":50} │
└────┴───────────┴────────────────────────────────────┘
我需要这样的结果:
┌───────────┬──────────────────────────────────────────────────┐
│ parent_id | result │
├───────────┼──────────────────────────────────────────────────┤
│ 1 | {"step_1":6,"step_2":12,"step_3":33,"step_4":10} │
│ 2 | {"step_1":1,"step_6":50} │
└───────────┴──────────────────────────────────────────────────┘
答案 0 :(得分:0)
在PostgreSQL 9.4 +中:
SELECT parent, JSON_OBJECT_AGG(key, value)
FROM (
SELECT parent, key, SUM(value::INT) AS value
FROM mytable
CROSS JOIN
LATERAL JSON_EACH_TEXT(result)
GROUP BY
parent, key
) q
GROUP BY
parent