Sonuçları virgülle ayrılmış liste olarak döndürmek için PostgreSQL sorgusu


100

Size SELECT id from tablebirkaç sonuç döndüren bir sorgunuz olduğunu varsayalım (gerçek durum karmaşık bir sorgudur).

Sorun id, virgülle ayrılmış tek bir satırda tüm geri dönüşlerin nasıl elde edileceği ?



Yukarıdaki "dupe", özellikle array_agg()işlevle alakalı ve yararlıydı .
Jay Taylor

Yanıtlar:


219

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

PostgreSQL 9.0 gerektirir ama bu bir problem değildir.


Bunu şimdi yararlı buldum. Teşekkürler!
gooddadmike

48
En azından benim için string_agg'ın ilk argümanı için int almaktan hoşlanmadığını, bu yüzden şöyle bir şey yaptım: string_agg(CAST(id as varchar), ',')bunun yerine.
JZC

17
@JZC veya daha da kolay:string_agg(id::text, ',')
Alphaaa

6
Sütunu sıralamak istiyorsanızselect string_agg(id, ', ' order by id desc) from table
MA Hossain Tonu

1
STRING_AGG(DISTINCT customer_name, ',')
Sorgumla

53

Sorgunuzla birlikte array () ve array_to_string () işlevlerini kullanabilirsiniz. İle SELECT array( SELECT id FROM table );şöyle bir sonuç alacaksınız: {1,2,3,4,5,6}

Ardından, {} işaretlerini kaldırmak isterseniz, sadece array_to_string () işlevini ve ayırıcı olarak virgül kullanabilirsiniz, böylece: SELECT array_to_string( array( SELECT id FROM table ), ',' )şöyle bir sonuç alır: 1,2,3,4,5,6


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


0

bunun için array_to_string () & array () işlevini kullanın.

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

Bu, kullanmaktan nasıl daha iyi string_agg()?
a_horse_with_no_name

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

{1,2,3,4}

Postgres 11 kullanıyorum ve EntityFramework onu tamsayı dizisi olarak getiriyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.