PostgreSQL中如何提取复合类型数组各元素的第一个字段?
提取复合类型数组中指定字段并重新聚合数组
我来帮你搞定这个需求!针对你定义的复合类型数组,我们可以通过拆分数组→提取目标字段→重新聚合的三步操作来实现你想要的结果。
解决方案SQL
直接用这条语句就能得到你期望的输出:
SELECT array_agg(elem.a) AS pv FROM f, unnest(pv) AS elem;
语句解释
unnest(pv):把pv列里的复合类型数组拆分成单独的行,每一行对应一个p类型的元素;我们给这个拆分后的结果起个别名elem。elem.a:从每个拆分出来的复合类型元素中提取a字段的值。array_agg(elem.a):把同一原始行拆分出来的所有a字段值重新聚合回数组,正好对应你想要的输出格式。
验证结果
执行这条语句后,输出会和你期望的一致:
pv -------- {10,30} {1}
如果你后续表中添加了其他字段,需要按原行分组聚合的话,只需要加上GROUP BY子句即可,比如假设表有id字段:
SELECT id, array_agg(elem.a) AS pv FROM f, unnest(pv) AS elem GROUP BY id;
内容的提问来源于stack exchange,提问作者Shore
相关产品推荐
相关产品推荐

