首页 >数据库 >mysql教程 >PostgreSQL中如何高效地将数组组合成多维数组?

PostgreSQL中如何高效地将数组组合成多维数组?

Barbara Streisand
Barbara Streisand原创
2025-01-06 01:11:39716浏览

How Can I Efficiently Combine Arrays into Multi-Dimensional Arrays in PostgreSQL?

在 PostgreSQL 中将数组组合成多维数组

简介

PostgreSQL 提供了各种高效组合数组的选项,使得操作复杂数据成为可能轻松构建结构。

简单的 zip() 函数(相同长度数组)

要组合两个长度相等的数组,可以使用 unnest() 函数和 ARRAY[] 构造函数:

SELECT ARRAY[a,b] AS ab
FROM (
    SELECT unnest('{a,b,c}'::text[]) AS a, unnest('{d,e,f}'::text[]) AS b
) x;

结果:

  ab
-------
{a,d}
{b,e}
{c,f}

zip() 函数聚合到多维数组

用于聚合配对将元素合并到多维数组中,PostgreSQL 提供了自定义聚合函数 array_agg_mult():

CREATE AGGREGATE array_agg_mult (anyarray) (
    SFUNC = array_cat,
    STYPE = anyarray,
    INITCOND = '{}'
);

用法:

SELECT array_agg_mult(ARRAY[ARRAY[a,b]]) AS ab
FROM (
    SELECT unnest('{a,b,c}'::text[]) AS a, unnest('{d,e,f}'::text[]) AS b
) x;

结果:

{{a,d},{b,e},{c,f}}

或者, zip2() 函数可以创建为包装器array_agg_mult():

CREATE OR REPLACE FUNCTION zip2(anyarray, anyarray)
RETURNS SETOF anyarray LANGUAGE SQL AS
$func$
SELECT array_agg_mult(ARRAY[ARRAY[a,b]])
FROM (SELECT unnest() AS a, unnest() AS b) x;
$func$

用法:

SELECT zip2('{a,b,c}'::text[], '{d,e,f}'::text[]);

结果:

{{a,d},{b,e},{c,f}}

Postgres 9.5 (array_agg(数组表达式))

在Postgres 9.5及更高版本中,array_agg(数组表达式)函数可以直接将数组组合成多维数组,相比自定义聚合函数提供了更高效的解决方案。它的用法与 array_agg_mult() 函数类似。

以上是PostgreSQL中如何高效地将数组组合成多维数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn