158 votes

Requête PostgreSQL pour retourner les résultats sous forme de liste séparée par des virgules

Disons que vous avez un SELECT id from table (le cas réel est une requête complexe) qui vous renvoie plusieurs résultats.

Le problème est de savoir comment obtenir tous id dans une seule ligne, séparés par des virgules ?

320voto

sorin Points 23747

SELECT string_agg(id::text, ',') FROM table

Requiert PostgreSQL 9.0 mais ce n'est pas un problème.

59voto

Jester Points 1186

Vous pouvez utiliser les fonctions array() et array_to_string() avec votre requête. Avec SELECT array( SELECT id FROM table ); vous obtiendrez un résultat comme : {1,2,3,4,5,6}

Ensuite, si vous souhaitez supprimer les signes {}, vous pouvez simplement utiliser la fonction array_to_string() et utiliser la virgule comme séparateur, ainsi : SELECT array_to_string( array( SELECT id FROM table ), ',' ) vous obtiendrez un résultat comme : 1,2,3,4,5,6

17voto

Anthony Wang Points 611

Vous pouvez générer un CSV à partir de n'importe quelle requête SQL en utilisant psql :

$ psql
> \o myfile.csv
> \f ','  
> \a
> SELECT col1 AS column1, col2 AS column2 ... FROM ...

Le fichier myfile.csv résultant aura les noms de colonnes du jeu de résultats SQL comme en-têtes de colonnes CSV, et les tuples de la requête comme lignes CSV.

h/t http://pookey.co.uk/wordpress/archives/51-outputting-from-postgres-to-csv

4voto

Ashok Parmar Points 92

Utilisez la fonction array_to_string() & array() pour la même chose.

select array_to_string(array(select column_name from table_name where id=5), ', ');

4voto

user11577542 Points 1

Utilisez la requête ci-dessous, elle fonctionnera et donnera le résultat exact.

SELECT array_to_string(array_agg(id), ',') FROM table

Sortie : {1,2,3,4,5}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X