Heim >Datenbank >MySQL-Tutorial >Wie komprimiere ich zwei Arrays in PostgreSQL, um ein mehrdimensionales Array zu erstellen?

Wie komprimiere ich zwei Arrays in PostgreSQL, um ein mehrdimensionales Array zu erstellen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-04 18:28:40523Durchsuche

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

Postgres: Kombinieren von zwei Arrays mit einer „zip()“-Funktion

Postgres-Funktionen

Es gibt mehrere Methoden, um zwei Arrays zu einem einzigen zu kombinieren mehrdimensionales Array mit Postgres-Funktionen:

Postgres 9.5 oder später:

  • array_agg(array expression): Verkettet alle Eingabearrays zu einem Array mit einer höheren Dimension.

Postgres 9.4:

  • ROWS FROM oder unnest(): Entschachtelt mehrere Arrays in parallel, wodurch Arrays unterschiedlicher Länge möglich sind.

Postgres 9.3 oder älter:

  • zip(): Eine benutzerdefinierte Funktion, die zwei Arrays gleichzeitig entschachtelt, Erstellen eines neuen Satzes von Arrays.

Einfaches zip() Funktion

Betrachten Sie das folgende Beispiel für Postgres 9.3 oder früher:

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

Ergebnis:

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

zip() to Multi-Dimensional Array

Um den resultierenden Satz von Arrays zu einem zweidimensionalen Array zusammenzufassen, wird eine benutzerdefinierte Aggregatfunktion aufgerufen array_agg_mult() wird benötigt:

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

Dann verwenden Sie es wie folgt:

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;

Ergebnis:

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

Das obige ist der detaillierte Inhalt vonWie komprimiere ich zwei Arrays in PostgreSQL, um ein mehrdimensionales Array zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn