gpt4 book ai didi

json - 在 postgres 查询中执行 "running json concatenation"

转载 作者:行者123 更新时间:2023-11-29 14:14:42 26 4
gpt4 key购买 nike

是否可以对 json 执行类似于运行总和的操作?

我有这张表:

   day        id          data
────────────┼───────┼───────────────────
2016-06-20 │ 1 │ {"key0": "value0"}
2016-06-21 │ 1 │ {"key1": "value1"}
2016-06-22 │ 1 │ {"key2": "value2"}

我希望它是这张表:

   day        id                  data
────────────┼───────┼────────────────────────────────────────────────────
2016-06-20 │ 1 │ {"key0": "value0"}
2016-06-21 │ 1 │ {"key0": "value0", "key1": "value1"}
2016-06-22 │ 1 │ {"key0": "value0", "key1": "value1", "key2": "value2"}

我尝试使用窗口函数,因为聚合函数的默认行为与此类似,但我不知道如何为 json 正确执行此操作。

有人能帮忙吗?

最佳答案

没有连接 JSONB 对象的内置聚合(jsonb_agg() 返回一个数组,而不是单个 JSON 值),但是创建一个非常容易:

create aggregate jsonb_append(jsonb) 
(
sfunc = jsonb_concat(jsonb, jsonb),
stype = jsonb
);

这个聚合也可以用作 window function它执行“运行聚合”,因此您可以:

select day, id, jsonb_append(data) over (order by day)
from topo
order by day;

请注意,JSONB 不保留键的顺序。因此,聚合 jsonb 值中键的顺序可能与检索顺序不完全相同。

如果相同的键存在于多行中,“最后”行的值(根据order by)将被保留。

Online example

关于json - 在 postgres 查询中执行 "running json concatenation",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53112968/

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