将数组取消嵌套到表 Postgres

Posted

技术标签:

【中文标题】将数组取消嵌套到表 Postgres【英文标题】:Unnest Array to table Postgres 【发布时间】:2021-05-21 18:32:42 【问题描述】:

如何在 Postgres 中将 ARRAY 取消嵌套为表格格式 这些是我创建的类型

create type ngfcst.test1 as (territory character varying, territoryname character varying, parentname character varying, parentterritory character varying, lowest_level_flag character varying, count bigint);

我正在做一个 array_agg 来使用这种类型返回一个结果集。下面是函数 test12 的示例输出:

select * from test12(
    'some_parameters');
OUTPUT (2 records):
"(\"rec11",rec12,\"rec13",\"rec14\",rec15,1)","(\"rec21\",rec22,\"rec23\",\"rec24\",rec25,2)"

我希望数据采用正确的表格格式,但这样做无济于事:

with main as(
    select * from  test12(
    'some_parameters'))
    select unnest(o_show_proxy::ngfcst.test1[]) as unnest_col from main;

这确实分隔了记录,但没有分隔列。 我想要从下面的查询中得到的行和列格式的输出:

select * from unnest(array[row('row11','row12','row13','row14','row15',1),
              row('row21','row22','row23','row24','row25',2)]::ngfcst.test1[])

如果有任何方法可以获取行和列格式的输出,请告诉我。

【问题讨论】:

您的样本输出不一致。请检查一次 【参考方案1】:

这里cross join lateral 会有所帮助 --

根据您的示例。考虑到您的函数 test12() 正在根据您的用户定义的 TYPE test1 返回正确的数组格式。

试试这个:

with cte as(
    select * from  test12(
    'some_parameters')
)
    select t.* from cte cross join lateral unnest(cte.o_show_proxy::test1[]) t;

DEMO

【讨论】:

嗨 Akhilesh,我一直在阅读交叉连接横向功能以及在何处使用它,但我无法理解它是如何工作的。你能在这里帮忙吗 请阅读post

以上是关于将数组取消嵌套到表 Postgres的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 BigQuery 中取消嵌套数组,以便将嵌套数据按键值拆分为列?

SQL(雅典娜)中的取消嵌套:如何将结构数组转换为从结构中提取的值数组?

BigQuery 取消嵌套数组 - 获取重复项

在 Join PostgreSQL 中取消嵌套数组

将嵌套的 JSON 数据列出到表视图

如何在查询中取消嵌套嵌套表的集合?