Maison >base de données >tutoriel mysql >Comment puis-je combiner efficacement des tableaux en tableaux multidimensionnels dans PostgreSQL ?

Comment puis-je combiner efficacement des tableaux en tableaux multidimensionnels dans PostgreSQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-06 01:11:39716parcourir

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

Combinaison de tableaux en tableaux multidimensionnels dans PostgreSQL

Introduction

PostgreSQL fournit diverses options pour combiner efficacement des tableaux, permettant de manipuler des données complexes structures en toute simplicité.

Fonction simple zip() (même longueur Tableaux)

Pour combiner deux tableaux de longueur égale, vous pouvez utiliser la fonction unnest() avec le constructeur ARRAY[] :

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

Résultat :

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

Fonction zip() Agrégation en tableaux multidimensionnels

Pour agréger des éléments appariés dans un tableau multidimensionnel array, PostgreSQL propose la fonction d'agrégation personnalisée array_agg_mult() :

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

Utilisation :

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;

Résultat :

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

Alternativement, la fonction zip2() peut être créé comme un wrapper autour 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$

Utilisation :

SELECT zip2('{a,b,c}'::text[], '{d,e,f}'::text[]);

Résultat :

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

Postgres 9.5 (array_agg(expression de tableau))

Dans Postgres 9.5 et versions ultérieures, la fonction array_agg(array expression) peut combinez directement des tableaux en un tableau multidimensionnel, offrant une solution plus efficace par rapport à la fonction d'agrégation personnalisée. Son utilisation est similaire à la fonction array_agg_mult().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn