首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个对象的JSON数据中的PostgreSQL json - String_agg

具有多个对象的JSON数据中的PostgreSQL json - String_agg
EN

Stack Overflow用户
提问于 2021-04-07 13:53:50
回答 1查看 137关注 0票数 0

我在PostgreSQL中创建了带有Json数据类型字段的表。

我还在json data中插入了带有多个对象的数据。

像这样

代码语言:javascript
复制
[
    {
        "Type": "1",
        "Amount": "1000",
        "Occurrence": 2,
        "StartDate": "1990-01-19",
        "EndDate": "1999-04-03"
    },
    {
        "Type": "2",
        "Amount": "2000",
        "Occurrence": 2,
        "StartDate": "1984-11-19",
        "EndDate": "1997-09-29"
    }
]

现在我必须按照下面的格式在单行中检索数据,就像string_agg()函数输出。

代码语言:javascript
复制
Type    Amount
1--2    1000-2000

此外,我还检查了PostgreSQL (https://www.postgresqltutorial.com/postgresql-json/)中json的内置函数,但没有找到任何解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-07 14:10:44

您必须取消数组的嵌套并聚合各个键:

下面假设您在表中有某种类型的主键列(除了JSON列之外):

代码语言:javascript
复制
select t.id, 
       string_agg(x.element ->> 'Type', '-') as types,
       string_agg(x.element ->> 'Amount', '-') as amounts
from the_table t
  cross join jsonb_array_elements(t.data) as x(element)
group by t.id;

jsonb_array_elements()提取每个数组元素,然后主查询使用string_agg()按ID聚合该元素。

上面假设您的列是用jsonb类型定义的(它应该是)。如果不是,则需要改用json_array_elements()

Online example

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66980270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档