PostgreSQL中如何将两列数组合并为多维数组对?
解决PostgreSQL数组列合并为多维数组的问题
单行数组列配对合并
你的需求是将单行中两个同长度的一维数组,按对应元素配对成二维数组。无需使用array_agg_mult,直接用unnest配合array_agg即可实现:
SELECT id, array_agg(ARRAY[f, b]) AS combined_array FROM mytable, unnest(foo, bar) AS u(f, b) GROUP BY id;
针对你的示例数据,执行后会返回预期结果:
id | combined_array ----+--------------------------- 1 | {{1.2,0.01},{2.3,0.05},{3.5,0.6}}
修复array_agg_mult的报错问题
如果确实需要用array_agg_mult(比如合并多行二维数组为更高维数组),报错是因为你可能没有创建正确的函数版本。array_cat是PostgreSQL内置函数,只要函数定义正确就可以调用。正确的array_agg_mult创建语句如下:
CREATE AGGREGATE array_agg_mult(anyarray) ( SFUNC = array_cat, STYPE = anyarray, INITCOND = '{}' );
创建完成后,若要将多行的二维数组合并为三维数组,可这样使用:
SELECT array_agg_mult(combined_array) FROM ( SELECT array_agg(ARRAY[f, b]) AS combined_array FROM mytable, unnest(foo, bar) AS u(f, b) GROUP BY id ) AS sub;
注意事项
- 确保
foo和bar数组长度一致,否则unnest(foo, bar)会按短数组长度截断;PostgreSQL 14+版本可开启unnest_fill_missing参数,用NULL填充缺失元素。 - 若两列数组类型不同,需先统一类型,例如用
foo::numeric[]转换后再操作。
内容的提问来源于stack exchange,提问作者GEobserver
相关产品推荐
相关产品推荐

