2012-08-10 7 views
45

Sagen wir, Sie haben eine SELECT id from table Abfrage (der wirkliche Fall ist eine komplexe Abfrage), die Sie mehrere Ergebnisse zurückgibt.PostgreSQL-Abfrage, um Ergebnisse als eine kommagetrennte Liste zurückzugeben

Das Problem ist, wie alle id Rückkehr in einer einzigen Zeile, Komma getrennt bekommen?

+4

möglich Duplikat [Postgresql GROUP_CONCAT gleichwertig?] (Http://stackoverflow.com/questions/2560946/postgresql-group-concat-equivalent) – podiluska

+0

Die oben "Betrogene" war relevant und nützlich, insbesondere die Funktion 'array_agg()'. –

Antwort

94

SELECT string_agg(id, ',') FROM table

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

+0

Fand das gerade jetzt nützlich. Vielen Dank! – gooddadmike

+23

Beachten Sie, dass string_agg für mich nicht mochte, ein int für das erste Argument zu nehmen, also tat ich etwas wie: 'string_agg (CAST (id as varchar), ',')' stattdessen. – JZC

+4

@JZC, oder noch einfacher: 'string_agg (id :: text, ',')' – Alphaaa

37

Sie können die Funktionen array() und array_to_string() zusammen mit Ihrer Abfrage verwenden. {1,2,3,4,5,6}

Dann, wenn Sie die {} Zeichen entfernen möchten, können Sie die array_to_string() Funktion und Anwendung benutzen Sie einfach: Mit SELECT array(SELECT id FROM table); werden Sie ein Ergebnis wie erhalten Komma als Trennzeichen, so: SELECT array_to_string(array(SELECT id FROM table), ',') wird ein Ergebnis wie erhalten: 1,2,3,4,5,6

+0

'' SELECT array_to_string (ID, ',') AS ID von Tabelle'' –

8

Sie können als CSV-Datei beliebigen SQL-Abfrage mit psql erzeugen:

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

Das resultierende myfile.csv wird die SQL-Ergebnisspaltennamen als CSV-Spaltenüberschriften und die Abfrage Tupeln als CSV-Reihen haben.

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

+3

Hiya, das könnte das Problem lösen ... aber es wäre gut, wenn Sie eine kleine Erklärung geben könnten, wie und warum es funktioniert :) Vergiss nicht - es gibt Haufen von Neulingen auf Stack overflow, und sie könnten ein oder zwei Dinge von deinem Fachwissen lernen - was für dich offensichtlich ist, mag für sie nicht so sein. –

+1

Völlig @ Taryn. Bitte zeigen Sie ein relevantes Beispiel anstelle des "some SQL". –

Verwandte Themen