首頁 > 資料庫 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板