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

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

Barbara Streisand
发布: 2025-01-06 01:11:39
原创
698 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板