2012-08-10 22 views
45

Size bir kaç sonuç döndüren bir SELECT id from table sorgunuzu (gerçek durum karmaşık bir sorgudur) varsayalım.PostgreSQL sorgusu sonuçların virgülle ayrılmış bir liste olarak döndürülmesi

Sorun, tek bir satırda, virgülle ayrılmış olarak tüm id dönüşünün nasıl alınacağıdır?

+4

olası çift [Postgresql GROUP_CONCAT eşdeğer?] (Http://stackoverflow.com/questions/2560946/postgresql-group-concat-equivalent) – podiluska

+0

yukarıdaki "yinelenen" ilgili ve Özellikle, özellikle 'array_agg() işlevini kullanır. –

cevap

94

SELECT string_agg(id, ',') FROM table

PostgreSQL 9.0 gerektirir ama bu bir sorun değil.

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

çıkan myfile.csv CSV sütun başlıkları gibi SQL resultset sütun adlarını olacak ve CSV satır olarak sorgu tuples:

+0

numaranı şu an yararlı buldum. Teşekkürler! – gooddadmike

+23

En azından, string_agg'ın ilk argümanı için bir int almaktan hoşlanmadığına dikkat edin. Bu yüzden şöyle bir şey yaptım: 'string_agg (CAST (id olarak varchar), ',')' yerine. – JZC

+4

@JZC, ya da daha da kolay: 'string_agg (id :: text, ',')' – Alphaaa

37

Sorgunuzu kullanarak array() ve array_to_string() işlevlerini kullanabilirsiniz. Eğer {} işaretleri kaldırmak istediğiniz takdirde sadece array_to_string() fonksiyonu ve kullanımını kullanabilirsiniz, Sonra {1,2,3,4,5,6}

: SELECT array(SELECT id FROM table); ile bir sonuç gibi alacak virgül ayırıcı olarak, yani: SELECT array_to_string(array(SELECT id FROM table), ',') gibi bir sonuç elde edecektir: 1,2,3,4,5,6

+0

'' SELECT array_to_string (id, ',') Tablodan '' –

8

Sen psql'i kullanarak herhangi bir SQL sorgusu bir CSV oluşturabilir.

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

+3

Hiya, bu problemi çözebilir ... ama nasıl ve neden hakkında biraz açıklama yapabilirseniz iyi olur Bu işe yarıyor :) Unutmayın - Yığın taşmasıyla ilgili yeni başlayanlar yığınları var ve uzmanlığınızdan bir veya iki şey öğrenebilirler - sizin için böyle olmayan şeyler nelerdir? –

+1

Tamamen @Taryn. Lütfen "bazı SQL" yerine uygun bir örnek gösteriniz. –

İlgili konular