首頁 >資料庫 >mysql教程 >PostgreSQL中如何有效率地將陣列組合成多維數組?

PostgreSQL中如何有效率地將陣列組合成多維數組?

Barbara Streisand
Barbara Streisand原創
2025-01-06 01:11:39715瀏覽

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