2012-08-10 3 views
45

たとえば、SELECT id from tableというクエリ(実際のケースは複雑なクエリです)では、いくつかの結果が返されます。結果をカンマで区切ったリストとして返すPostgreSQLのクエリ

問題はすべてidをカンマ区切りの単一の行に戻す方法です。

+4

の可能重複[PostgresqlのGROUP_CONCAT相当?](http://stackoverflow.com/questions/2560946/postgresql-group-concat-equivalent) – podiluska

+0

上記 "デュープ" は妥当であったととりわけ 'array_agg()'関数が便利です。 –

答えて

94

SELECT string_agg(id, ',') FROM table

はPostgreSQL 9.0が必要ですが、それは問題ではありません。

+0

これはちょっと便利です。ありがとう! – gooddadmike

+23

少なくとも私にとっては、string_aggは最初の引数としてintを取るのが好きではなかったので、代わりに 'string_agg(CAST(id as varchar)、 '、')'のようなことをしました。 – JZC

+4

@JZC、さらに簡単に: 'string_agg(id :: text、 '、')' – Alphaaa

37

query()関数とarray_to_string()関数を組み合わせて使用​​することができます。 {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'' –

8

あなたはpsqlを使用して、任意のSQLクエリからCSVを生成することができます。

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

結果myfile.csvは、CSVの行としてCSVの列ヘッダーとしてSQLの結果セットの列名、およびクエリのタプルを持つことになります。

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

+3

これはよく問題を解決するかもしれませんが、どうやってどうやって説明すればよいでしょうか?それは働いています:)スタックオーバーフローの初心者のヒープがあり、彼らはあなたの専門知識から何かを学ぶことができました。あなたにとって明らかであることはそうではないかもしれません。 –

+1

完全に@Taryn。 「いくつかのSQL」の代わりに関連する例を表示してください。 –

関連する問題