ホームページ > データベース > mysql チュートリアル > PostgreSQL で配列を効率的に多次元配列に結合するにはどうすればよいですか?

PostgreSQL で配列を効率的に多次元配列に結合するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-06 01:11:39
オリジナル
719 人が閲覧しました

How Can I Efficiently Combine Arrays into Multi-Dimensional Arrays in PostgreSQL?

PostgreSQL で配列を多次元配列に結合する

はじめに

PostgreSQL には、配列を効率的に結合するためのさまざまなオプションが用意されており、複雑なデータを操作できるようになります。

単純な zip() 関数 (同じ長さ)配列)

同じ長さの 2 つの配列を結合するには、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 = '{}'
);
ログイン後にコピー

Usage:

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;
ログイン後にコピー

Result:

{{a,d},{b,e},{c,f}}
ログイン後にコピー
ログイン後にコピー

Alternatively を提供します。 、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート