PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Concaténer plusieurs lignes dans un tableau avec SQL sur PostgreSQL

Il s'agit d'un Postgres intégré depuis quelques versions donc vous n'avez plus besoin de définir le vôtre, le nom est array_agg() .

test=> select array_agg(n) from generate_series(1,10) n group by n%2;
  array_agg   
--------------
 {1,3,5,7,9}
 {2,4,6,8,10}

(c'est Postgres 8.4.8).

Notez qu'aucun ORDER BY est spécifié, donc l'ordre des lignes de résultat dépend de la méthode de regroupement utilisée (ici, hachage) c'est-à-dire qu'il n'est pas défini. Exemple :

test=> select n%2, array_agg(n) from generate_series(1,10) n group by (n%2);
 ?column? |  array_agg   
----------+--------------
        1 | {1,3,5,7,9}
        0 | {2,4,6,8,10}

test=> select (n%2)::TEXT, array_agg(n) from generate_series(1,10) n group by (n%2)::TEXT;
 text |  array_agg   
------+--------------
 0    | {2,4,6,8,10}
 1    | {1,3,5,7,9}

Maintenant, je ne sais pas pourquoi vous obtenez {10,2,4,6,8} et {9,7,3,1,5} , puisque generate_series() doit envoyer les lignes dans l'ordre.