2012-08-10 109 views
45

假設您有一個查詢(真實情況是一個複雜查詢),它會返回多個結果。PostgreSQL查詢以逗號分隔的列表返回結果

問題是如何讓所有的id返回單行,逗號分隔?

+4

的可能重複的[Postgresql的GROUP_CONCAT等效?](http://stackoverflow.com/questions/2560946/postgresql-group-concat-equivalent) – podiluska 2012-08-10 09:40:50

+0

上述 「欺騙」 是相關的和很有用,特別是'array_agg()'函數。 – 2013-06-10 23:44:05

回答

94

SELECT string_agg(id, ',') FROM table

需要PostgreSQL的9.0,但是這不是一個問題。

+0

剛纔發現這個有用。謝謝! – gooddadmike 2013-08-13 14:15:14

+23

請注意,至少對於我來說,string_agg不喜歡爲它的第一個參數取一個int,所以我做了類似:'string_agg(CAST(id as varchar),',')'。 – JZC 2015-06-22 17:24:45

+4

@JZC,或者更簡單:'string_agg(id :: text,',')' – Alphaaa 2016-11-10 11:37:02

37

您可以使用array()和array_to_string()函數來查詢您的查詢。 With SELECT array(SELECT id FROM table);您將得到如下結果:{1,2,3,4,5,6}

然後,如果您希望刪除{}符號,則可以使用array_to_string()函數並使用逗號作爲分隔符,所以:SELECT array_to_string(array(SELECT id FROM table), ',')會得到這樣的結果是:1,2,3,4,5,6

+0

''SELECT array_to_string(id,',')AS id FROM table'' – 2017-06-15 06:23:13

8

您可以從任何SQL查詢中使用PSQL生成CSV:

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

產生的myfile.csv將有SQL ResultSet列名作爲CSV列標題,以及查詢元組爲CSV行。

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

+3

Hiya,這可能很好的解決了這個問題......但是如果你能提供一些關於如何和爲什麼的解釋它的工作原理:)不要忘了 - 堆棧溢出的堆棧中有許多新手,他們可以從你的專業知識中學到一兩件事 - 對你來說顯而易見的東西可能不是這樣。 – 2014-07-23 23:36:41

+1

共@Taryn。請以相關示例代替「某些SQL」。 – 2014-07-23 23:45:24