我使用的是postgres,我在一个名为observation的列中的数组中有多个jsonb条目。输入为'[{"a": 1}, {"b": 2}, {"c": 0.5}]'::jsonb
。有多个行,每个行中有多个json元素。我想把它们合并成一行中的一个大条目,这样我就只会有一列的一个观察结果。
我试过以下方法
INSERT INTO data
SELECT jsonb_agg(observation) AS concatenated_json
FROM (
SELECT observation
FROM test
) AS subquery;
字符串
但是我得到的结果是一个数组的数组。我不想得到多个数组,只要一个。
3条答案
按热度按时间3phpmpom1#
字符串
使用
jsonb_array_elements()
将json数组扩展为一组json值。举例来说:型
(3排)
将转换为9行json值:
型
然后我们使用
jsonb_agg()
将json值聚合到表data
中以输出一行:型
wixjitnu2#
可以使用
jsonb_object_agg
:字符串
See fiddle
对于每一行,该查询将把
observations
数组元素中的所有键值对合并到一个对象中。然后,合并的对象被聚合到单个数组中。mftmpeh83#
您可以创建一个用户定义的聚合,它可以非常简单地完成您想要的任务:
字符串
然后将它与GROUP BY一起使用,或者因为您只需要一行,所以不使用GROUP BY:
型
一方面,它比必须将对象解嵌套然后重新组装它们要好,另一方面,阅读您的代码的人可能会被看起来像内置函数的东西所迷惑,但实际上不是。