PostgreSQL-Abfrage, um Ergebnisse als durch Kommas getrennte Liste zurückzugeben

93

Angenommen, Sie haben eine SELECT id from tableAbfrage (der eigentliche Fall ist eine komplexe Abfrage), die mehrere Ergebnisse zurückgibt.

Das Problem ist, wie alle idRückgaben in einer einzigen Zeile durch Kommas getrennt werden.

Sorin
quelle
4
Mögliches Duplikat des Postgresql GROUP_CONCAT-Äquivalents?
Podiluska
Das obige "Dupe" war relevant und nützlich, insbesondere die array_agg()Funktion im Besonderen.
Jay Taylor

Antworten:

205

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

Benötigt PostgreSQL 9.0, aber das ist kein Problem.

Sorin
quelle
Fand dies gerade jetzt nützlich. Vielen Dank!
Gooddadmike
47
Beachten Sie, dass string_agg zumindest für mich nicht gerne ein int als erstes Argument verwendet hat, also habe ich string_agg(CAST(id as varchar), ',')stattdessen Folgendes getan:
JZC
17
@ JZC oder noch einfacher:string_agg(id::text, ',')
Alphaaa
6
Wenn Sie die Spalte sortieren wolltenselect string_agg(id, ', ' order by id desc) from table
MA Hossain Tonu
1
Ich bin mit meiner Anfrage auf Duplikate STRING_AGG(DISTINCT customer_name, ',')
gestoßen, habe
51

Sie können die Funktionen array () und array_to_string () zusammen mit Ihrer Abfrage verwenden. Mit erhalten SELECT array( SELECT id FROM table );Sie ein Ergebnis wie: {1,2,3,4,5,6}

Wenn Sie dann die Zeichen {} entfernen möchten, können Sie einfach die Funktion array_to_string () verwenden und Komma als Trennzeichen verwenden. So SELECT array_to_string( array( SELECT id FROM table ), ',' )erhalten Sie ein Ergebnis wie: 1,2,3,4,5,6

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

Sie können eine CSV aus jeder SQL-Abfrage mit psql generieren:

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

Die resultierende Datei myfile.csv enthält die Spaltennamen der SQL-Ergebnismenge als CSV-Spaltenüberschriften und die Abfragetupel als CSV-Zeilen.

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

Anthony Wang
quelle
0

Verwenden Sie dazu die Funktion array_to_string () & array ().

select array_to_string(array(select column_name from table_name where id=5), ', ');
Ashok Parmar
quelle
Wie ist das besser als zu benutzen string_agg()?
a_horse_with_no_name
-1
SELECT array_agg(id, ',') FROM table

{1,2,3,4}

Ich verwende Postgres 11 und EntityFramework ruft es als Array von Ganzzahlen ab.

profimedica
quelle