PostgreSQL requête pour renvoyer les résultats comme une liste séparée par des virgules
Disons que vous avez un SELECT id from table
requête (le cas réel est une requête complexe) qui ne vous renvoyer plusieurs résultats.
Le problème est de savoir comment obtenir tous les id
de retour dans une seule ligne, séparés par des virgules?
- double possible de Postgresql GROUP_CONCAT équivalent?
- Ci-dessus "dupe" pertinents et utiles, en particulier le
array_agg()
fonction en particulier.
Vous devez vous connecter pour publier un commentaire.
SELECT string_agg(id, ',') FROM table
Nécessite PostgreSQL 9.0, mais ce n'est pas un problème.
string_agg(CAST(id as varchar), ',')
à la place.string_agg(id::text, ',')
select string_agg(id, ', ' order by id desc) from table
STRING_AGG(DISTINCT customer_name, ',')
Vous pouvez utiliser le tableau() et array_to_string() fonctions togetter avec votre requête.
Avec
SELECT array( SELECT id FROM table );
vous obtiendrez un résultat comme: {1,2,3,4,5,6}Alors, si vous souhaitez supprimer le {} signes, vous pouvez simplement utiliser le array_to_string() et la fonction utiliser la virgule comme séparateur, donc:
SELECT array_to_string( array( SELECT id FROM table ), ',' )
obtiendrez un résultat comme: 1,2,3,4,5,6SELECT array_to_string( id, ',' ) AS id FROM table
Vous pouvez générer un fichier CSV à partir d'une requête SQL à l'aide de psql:
L'résultant myfile.csv aura le resultset SQL les noms de colonnes comme CSV en-têtes de colonne, et la requête n-uplets d'CSV lignes.
h/t http://pookey.co.uk/wordpress/archives/51-outputting-from-postgres-to-csv