有什么方法可以让我从列中读取 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/