結果をコンマ区切りリストとして返すPostgreSQLクエリ


93

あなたが持っていると言うSELECT id from tableあなたにいくつかの結果を返すんクエリを(実際のケースは、複雑なクエリです)。

問題は、すべてのid戻り値をカンマで区切って単一行に取得する方法ですか?



上記の「重複」は、特にarray_agg()機能に関連性があり、有用でした。
ジェイテイラー

回答:


205

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

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


これは今すぐ役に立ちました。ありがとう!
gooddadmike 2013

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

17
@JZC、またはさらに簡単:string_agg(id::text, ',')
Alphaaa

6
列を並べ替える場合select string_agg(id, ', ' order by id desc) from table
MA Hossain Tonu '14

1
私は私のクエリで重複に遭遇しましたが、STRING_AGG(DISTINCT customer_name, ',')
それで

51

クエリでarray()関数とarray_to_string()関数を使用すると、より効果的です。次の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


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


0

同じためにarray_to_string()&array()関数を使用します。

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

これはどのように使用するよりも優れていstring_agg()ますか?
a_horse_with_no_name

-1
SELECT array_agg(id, ',') FROM table

{1,2,3,4}

私はPostgres 11を使用していますが、EntityFrameworkはそれを整数の配列としてフェッチしています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.