web-dev-qa-db-fra.com

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

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

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

72
sorin

SELECT string_agg(id, ',') FROM table

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

161
sorin

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 du type: {1,2,3,4,5,6}

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

46
Jester

Vous pouvez générer un fichier CSV à partir de toute requête SQL à l'aide de 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 colonne du jeu de résultats SQL sous forme d'en-têtes de colonne CSV et les tuples de requête sous forme de lignes CSV.

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

11
Anthony Wang