如果我有一个包含以下内容的表:
id: 1,
names: ["Dave", "Pete", "Eric"],
ages: [30, 40, 50]
(类型为 id:int,名称:char Varying[],年龄:int[])
我如何查询它以返回这个:
id: 1,
people: [{"name": "Dave", "Age": 30}, {"name": "Pete", "Age": 40}, {"name": "Eric", "Age": 50}]
(类型:id:int,人员:jsonb(或jsonb []))
谢谢
您需要使用 jsonb_build_object 首先为每条记录创建包含名称和 id 数据的 json 对象,然后使用 jsonb_agg 将所有对象组合并形成 json 数组,然后根据 id 对结果进行分组以获得所需的结果
像这样的事情:
SELECT
id,
jsonb_agg(
jsonb_build_object(
'name', names[i],
'Age', ages[i]
)
) AS people
FROM my_table_name, generate_series(1, array_length(names, 1)) AS s(i) GROUP BY id;