gpt4 book ai didi

json - Postgres : Nested Aggregate JSON

转载 作者:搜寻专家 更新时间:2023-10-30 23:00:38 24 4
gpt4 key购买 nike

我正在查询的表如下所示:

namespace | key   | value
---------------------------
foo | bar | baz
foo | alpha | beta
gamma | delta | epsilon

我想像这样从数据库中提取它:

{
"foo": {
"bar": "baz",
"alpha": "beta"
},
"gamma": {
"delta": "epsilon"
}
}

尝试使用 json_object_agg 并不能真正让我通过第一级,因为不允许嵌套聚合函数。但据我所知,我需要在 GROUP BY 中使用 GROUP BY,但我不确定这是否可行。也许解决方案与 WINDOW 有关?

最佳答案

with t (namespace, key, value) as (
values
('foo','bar','baz'),('foo','alpha','beta'),('gamma','delta','epsilon')
), s as (
select namespace, json_object_agg(key, value) as joa
from t
group by namespace
)
select json_object_agg(namespace, joa)
from s
;
json_object_agg
------------------------------------------------------------------------------------
{ "foo" : { "bar" : "baz", "alpha" : "beta" }, "gamma" : { "delta" : "epsilon" } }

由于 CTE 是一个优化障碍,这个版本可能会更快:

with t (namespace, key, value) as (
values
('foo','bar','baz'),('foo','alpha','beta'),('gamma','delta','epsilon')
)
select json_object_agg(namespace, joa)
from (
select namespace, json_object_agg(key, value) as joa
from t
group by namespace
) s

关于json - Postgres : Nested Aggregate JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33528898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com