gpt4 book ai didi

arrays - 展平/连接聚合 JSONB 数组

转载 作者:行者123 更新时间:2023-11-29 12:54:24 24 4
gpt4 key购买 nike

我有一个包含 JSON 数组的 JSONB 列。我现在需要将所有行中的所有不同值放入一个数组中。

输入:

id | values
-----------
1 | [x, y, z]
2 | [a, b, x]

期望的输出:

result
---------------
[a, b, x, y, z]

我不能只将 jsonb_aggDISTINCT 一起使用,因为那样会返回一个二维数组,而且我找不到任何 flatten 或 concat 聚合函数。我该如何解决这个问题?

最佳答案

您应该在使用聚合之前取消嵌套数组:

with my_table(id, data) as (
values
(1, '["x", "y", "z"]'::jsonb),
(2, '["a", "b", "x"]')
)

select jsonb_agg(distinct value)
from my_table, jsonb_array_elements_text(data);

jsonb_agg
---------------------------
["a", "b", "x", "y", "z"]
(1 row)

您可以对结果进行分组:

with my_table(id, data) as (
values
(1, '["x", "y", "z"]'::jsonb),
(1, '["a", "b", "x"]'),
(2, '["1", "2", "3"]'),
(2, '["2", "3", "4"]')
)

select id, jsonb_agg(distinct value)
from my_table, jsonb_array_elements_text(data)
group by id;

id | jsonb_agg
----+---------------------------
1 | ["a", "b", "x", "y", "z"]
2 | ["1", "2", "3", "4"]
(2 rows)

关于arrays - 展平/连接聚合 JSONB 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46835405/

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