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.



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.


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


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


0

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

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.