如何从json字段获取每个子字段SUM

时间:2016-04-18 11:57:19

标签: json postgresql

我在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}                         │
└───────────┴──────────────────────────────────────────────────┘

1 个答案:

答案 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