首页 > 数据库 > mysql教程 > 如何在 PostgreSQL 中组合数组?

如何在 PostgreSQL 中组合数组?

Susan Sarandon
发布: 2025-01-05 13:59:45
原创
574 人浏览过

How Can I Combine Arrays in PostgreSQL?

在 PostgreSQL 中组合数组:综合指南

简介

PostgreSQL 提供了各种操作数组的方法。一种常见的操作是将两个长度相等的数组组合成元素对。本文探讨了实现此任务的不同方法,考虑了 PostgreSQL 版本和特定用例。

压缩数组以实现单维输出

PostgreSQL 9.5 或更高版本

PostgreSQL 9.5 引入了 array_agg(数组表达式),允许您将多个数组连接成一个高维数组。此功能简化了数组组合任务,无需自定义聚合函数。

SELECT array_agg(ARRAY[a, b]) AS ab
FROM unnest('{a,b,c}'::text[]) AS a, unnest('{d,e,f}'::text[]) AS b;
登录后复制

PostgreSQL 9.4

在 PostgreSQL 9.5 之前,另一种方法涉及使用 unnest( ) 和 ROWS FROM.

SELECT ARRAY[a, b] AS ab
FROM unnest('{a,b,c}'::text[], '{d,e,f}'::text[])
AS tmp(a, b);
登录后复制

多维数组压缩输出

对于需要将数组组合成多维数组的情况,需要自定义聚合函数。

CREATE OR REPLACE FUNCTION array_agg_mult(anyarray)
RETURNS SETOF anyarray LANGUAGE SQL AS
$func$
  SELECT ARRAY[ARRAY[a, b]]
  FROM unnest() AS unnest1(a, b);
$func$;
登录后复制
SELECT array_agg_mult(ARRAY[ARRAY[a, b]]) AS ab
FROM unnest('{a,b,c}'::text[]) AS a, unnest('{d,e,f}'::text[]) AS b;
登录后复制

广义 Zip 函数

以下函数提供了一种压缩任何类型数组的通用方法:

CREATE OR REPLACE FUNCTION zip(anyarray, anyarray)
RETURNS SETOF anyarray LANGUAGE SQL AS
$func$
  SELECT array_agg_mult(ARRAY[ARRAY[a, b]])
  FROM unnest() AS unnest1(a, b)
  JOIN unnest() AS unnest2(a, b)
    ON true;
$func$;
登录后复制

用法场景

本文中提供的示例展示了组合数组的不同场景:

  • 简单压缩:将数组组合成一组元素对(单-维度输出)。
  • 多维压缩:将数组组合成二维数组。
  • 广义压缩:组合任意类型的数组并返回一组数组。

结论

PostgreSQL 提供了多种组合数组的选项,具体取决于版本和所需的输出格式。本文全面介绍了可用的方法,使您能够选择最适合您的特定需求的方法。

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

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