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


94

Supposons que vous ayez une SELECT id from tablerequête (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 idretours sur une seule ligne, séparés par des virgules?


4
duplication possible de l' équivalent
podiluska

La "dupe" ci-dessus était pertinente et utile, en particulier la array_agg()fonction en particulier.
Jay Taylor

Réponses:


207

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

Nécessite PostgreSQL 9.0 mais ce n'est pas un problème.


J'ai trouvé cela utile tout à l'heure. Merci!
gooddadmike

47
Notez que pour moi au moins, string_agg n'aimait pas prendre un int pour son premier argument, alors j'ai fait quelque chose comme: à la string_agg(CAST(id as varchar), ',')place.
JZC

17
@JZC, ou encore plus simple:string_agg(id::text, ',')
Alphaaa

6
Si vous vouliez trier la colonneselect string_agg(id, ', ' order by id desc) from table
MA Hossain Tonu

1
J'ai rencontré des doublons avec ma requête, mais je l'ai résolu avecSTRING_AGG(DISTINCT customer_name, ',')
ChristoKiwi

51

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, donc: SELECT array_to_string( array( SELECT id FROM table ), ',' )obtiendra un résultat comme: 1,2,3,4,5,6


1
SELECT array_to_string( id, ',' ) AS id FROM table
Alex R.


0

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), ', ');

En quoi est-ce mieux que d'utiliser string_agg()?
a_horse_with_no_name

-1
SELECT array_agg(id, ',') FROM table

{1,2,3,4}

J'utilise Postgres 11 et EntityFramework le récupère sous forme de tableau d'entiers.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.