Kueri PostgreSQL untuk mengembalikan hasil sebagai daftar yang dipisahkan koma

95

Katakanlah Anda memiliki SELECT id from tablekueri (kasus sebenarnya adalah kueri kompleks) yang mengembalikan Anda beberapa hasil.

Masalahnya adalah bagaimana cara mendapatkan semua idpengembalian dalam satu baris, dipisahkan dengan koma?

sorin
sumber
4
kemungkinan duplikat yang setara dengan Postgresql GROUP_CONCAT?
podiluska
"Penipuan" di atas relevan dan berguna, terutama array_agg()fungsi khususnya.
Jay Taylor

Jawaban:

208

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

Membutuhkan PostgreSQL 9.0 tetapi itu tidak menjadi masalah.

sorin
sumber
Menemukan ini berguna sekarang. Terima kasih!
gooddadmike
47
Perhatikan bahwa bagi saya setidaknya, string_agg tidak suka menggunakan int untuk argumen pertamanya jadi saya melakukan sesuatu seperti: string_agg(CAST(id as varchar), ',')sebagai gantinya.
JZC
17
@JZC, atau bahkan lebih mudah:string_agg(id::text, ',')
Alphaaa
6
Jika Anda ingin mengurutkan kolomselect string_agg(id, ', ' order by id desc) from table
MA Hossain Tonu
1
Saya menemukan duplikat dengan pertanyaan saya tetapi menyelesaikannya denganSTRING_AGG(DISTINCT customer_name, ',')
ChristoKiwi
51

Anda bisa menggunakan fungsi array () dan array_to_string () bersama dengan kueri Anda. DenganSELECT array( SELECT id FROM table ); Anda akan mendapatkan hasil seperti: {1,2,3,4,5,6}

Kemudian, jika Anda ingin menghapus tanda {}, Anda bisa menggunakan fungsi array_to_string () dan menggunakan koma sebagai pemisah, jadi: SELECT array_to_string( array( SELECT id FROM table ), ',' )akan mendapatkan hasil seperti: 1,2,3,4,5,6

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

gunakan fungsi array_to_string () & array () untuk hal yang sama.

select array_to_string(array(select column_name from table_name where id=5), ', ');
Ashok Parmar
sumber
Bagaimana ini lebih baik daripada menggunakan string_agg()?
a_horse_with_no_name
-1
SELECT array_agg(id, ',') FROM table

{1,2,3,4}

Saya menggunakan Postgres 11 dan EntityFramework mengambilnya sebagai array integer.

profimedica
sumber