json - 汇总 JSON 值

标签 json postgresql sum

有什么方法可以让我从列中读取 json 数据并根据它们的键将值加在一起并排列它们。该列的示例是:

id_column | json_data
1         | {"A": 1, "C": 4, "D": -2}
2         | {"B": 3, "S": 0, "A": 2, "D": 0}

我想要得到的最终结果应该是这样的:

json_data
{"A": 3, "B": 3, "C": 4, "D": -2, "S": 0}

所以最终的结果其实就是每一行的json数据的总和,而且key是按照A-Z的顺序排列的。

最佳答案

这将按如下方式工作:

SELECT json_object_agg(key, val ORDER BY key)
FROM (SELECT t.key,
             sum(CAST(t.val AS bigint)) AS val
      FROM j
         CROSS JOIN LATERAL jsonb_each_text(j.json_data)
                            AS t(key, val)
      GROUP BY t.key
     ) AS q;

                 json_object_agg                  
--------------------------------------------------
 { "A" : 3, "B" : 3, "C" : 4, "D" : -2, "S" : 0 }
(1 row)

jsonb中没有顺序,所以我用json作为结果。

关于json - 汇总 JSON 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57087066/

相关文章:

c# - 我可以在 LINQ 中使用后置条件语句吗?

javascript - map() 返回不在 react 组件中呈现

带有 JSON 对象的 JavaScript 作用域

sql - PostgreSQL CHECK 约束外键以外的列

sql - Rails 3 与 PostgreSQL : Problem with 'update_all' in joined table

sql - PostgreSQL 9.6 中窗口函数的不稳定查询行为

r - 根据 R 中 V2 中设置的条件计算 V1 列中的值之和

jquery - JSON多类别过滤器

json - 在 Swift 中安全地从 Int 向下转换为 Int8

list - Prolog中列表的偶数和奇数之和