如何结合使用Postgres和JSON创建3层对象

fcwjkofz  于 2022-09-21  发布在  PostgreSQL
关注(0)|答案(1)|浏览(149)

假设我有像这样的行
Id|group1|group2|值
-|-|
5|1|2|55
5|1|3|66
5|2|1|66
4|1|3|77

我想按ID分组,这样我就有两排了

| id       | json         
| -------- | -------------
| 5        | {1: {2: 55, 3: 66}, 2: {1: 66}}        
| 4        | {1: {3: 77}}

我尝试了用JSON_BUILD_OBJECT Package 的JSON_OBJECT_AGG的组合,结果是JSON_AGG。这几乎给了我想要的东西。这些项目在一个数组中。数组中的每个对象只有一个外键,并且所有内键都是预期的。如果我可以组合数组中的所有对象,或者只是正确地构建对象,任何一种方法都可以解决问题。

nnt7mjpx

nnt7mjpx1#

您需要使用jsonb_object_agg()两次,首先按id, group1聚合,然后仅按id分组:

select id, jsonb_object_agg(group1, json) as json
from (
    select 
        id,
        group1,
        jsonb_object_agg(group2, value) as json
    from my_table
    group by id, group1
    ) s
group by id

db<>fidlle.中进行测试

相关问题