jsonb/数组重新格式化查询

问题描述 投票:0回答:1

如果我有一个包含以下内容的表:

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 []))

谢谢

postgresql jsonb
1个回答
1
投票

您需要使用 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;
© www.soinside.com 2019 - 2024. All rights reserved.