Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Zip Dua Tatasusunan dalam PostgreSQL untuk Mencipta Tatasusunan Berbilang Dimensi?

Bagaimana untuk Zip Dua Tatasusunan dalam PostgreSQL untuk Mencipta Tatasusunan Berbilang Dimensi?

Linda Hamilton
Linda Hamiltonasal
2025-01-04 18:28:40554semak imbas

How to Zip Two Arrays in PostgreSQL to Create a Multi-Dimensional Array?

Postgres: Menggabungkan Dua Tatasusunan Menggunakan Fungsi "zip()"

Fungsi Postgres

Terdapat beberapa kaedah untuk menggabungkan dua tatasusunan menjadi satu tatasusunan berbilang dimensi menggunakan fungsi Postgres:

Postgres 9.5 atau lebih baru:

  • array_agg(ungkapan tatasusunan): Menggabungkan semua tatasusunan input ke dalam tatasusunan satu dimensi yang lebih tinggi.

Postgres 9.4:

  • BARIS DARI atau unnest(): Unnest berbilang tatasusunan selari, membenarkan tatasusunan dengan panjang yang berbeza.

Postgres 9.3 atau lebih lama:

  • zip(): Fungsi tersuai yang membuka sarang dua tatasusunan serentak, mencipta set tatasusunan baharu.

zip mudah() Fungsi

Pertimbangkan contoh berikut untuk Postgres 9.3 atau lebih awal:

SELECT ARRAY[a,b] AS ab
FROM  (
   SELECT unnest('{a,b,c}'::text[]) AS a
        , unnest('{d,e,f}'::text[]) AS b
    ) x;

Hasil:

  ab
-------
 {a,d}
 {b,e}
 {c,f}

zip() ke Berbilang Dimensi Tatasusunan

Untuk mengagregatkan set tatasusunan yang terhasil menjadi 2 dimensi tatasusunan, fungsi agregat tersuai yang dipanggil array_agg_mult() diperlukan:

CREATE AGGREGATE array_agg_mult (anyarray) (
   SFUNC    = array_cat
 , STYPE    = anyarray
 , INITCOND = '{}'
);

Kemudian, gunakannya seperti berikut:

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;

Keputusan:

{{a,d},{b,e},{c,f}}

Atas ialah kandungan terperinci Bagaimana untuk Zip Dua Tatasusunan dalam PostgreSQL untuk Mencipta Tatasusunan Berbilang Dimensi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn