在复合类型数组中,如何为数组中的所有条目选择复合类型的第一个元素?

时间:2018-05-20 06:46:46

标签: sql arrays postgresql

我有一个复合类型:

create type p as (a int, b int);

然后我创建了一个表:

create table f(pv p[]);

用它填写价值:

insert into f values(array[(10,20),(30,40)]::p[]);
insert into f values(array[(1,20)]::p[]);

现在我想要的是一个“select”语句,它为数组中的每个条目显示元素“a”,预期可能如下:

|pv     |
|{10,30}|
|{1}    |

我已经厌倦了许多陈述组合,但它没有提供答案。

有人可以帮忙吗?

谢谢!

海岸

1 个答案:

答案 0 :(得分:1)

您应该考虑在表格中添加id列,以便在unnest之后对该ID进行分组。

SELECT array_agg(a)
FROM f
    ,unnest(pv)
GROUP BY id;

否则,您可以按整个数组进行分组

SELECT array_agg(a)
FROM f
    ,unnest(pv)
GROUP BY pv;

Demo