我在每行中都有一个JSON列,如下所示
"{"car":12}"
"{"bike":9}"
如何使它成为一排像这个
{"car":12, "bike":9}
如果您不想要一个数组作为结果,则需要创建自己的聚合函数:
create aggregate jsonb_merge_agg(jsonb)
(
sfunc = jsonb_concat(jsonb, jsonb),
stype = jsonb
);
然后你可以这样使用它:
select jsonb_merge_agg(the_column)
from the_table;
如果你有多个具有相同键的值;最后一个";将覆盖以前的所有。
在线示例
对我之前的错误感到抱歉。
你可以这样做:
with data (jcol) as (
values ('{"car": 12}'::jsonb), ('{"bike":9}')
)
select jsonb_object_agg(k, v)
from data
cross join lateral jsonb_each(jcol) as j(k,v);
jsonb_object_agg
------------------------
{"car": 12, "bike": 9}
(1 row)