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;
以下函数提供了一种压缩任何类型数组的通用方法:
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中文网其他相关文章!