You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:01:23