Saya punya tabel dan saya ingin menarik satu baris per id dengan nilai bidang yang digabungkan.
Di meja saya, misalnya, saya punya ini:
TM67 | 4 | 32556
TM67 | 9 | 98200
TM67 | 72 | 22300
TM99 | 2 | 23009
TM99 | 3 | 11200
Dan saya ingin menampilkan:
TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3 | 23009,11200
Di MySQL saya bisa menggunakan fungsi agregat GROUP_CONCAT
, tetapi sepertinya tidak berfungsi di sini ... Apakah ada yang setara untuk PostgreSQL, atau cara lain untuk mencapai ini?
sql
postgresql
group-concat
string-aggregation
TwixxyKit
sumber
sumber
Jawaban:
Ini mungkin merupakan titik awal yang baik (hanya versi 8.4+):
array_agg mengembalikan sebuah array, tetapi Anda dapat melakukan CAST untuk mengirim dan mengedit sesuai kebutuhan (lihat klarifikasi, di bawah).
Sebelum versi 8.4, Anda harus menentukan sendiri sebelum menggunakannya:
(diparafrasekan dari dokumentasi PostgreSQL)
Klarifikasi:
sumber
Sejak 9.0 ini bahkan lebih mudah:
sumber
array_agg
) misalnyastring_agg(some_column, ',' ORDER BY some_column)
atau bahkanstring_agg(surname || ', ' || forename, '; ' ORDER BY surname, forename)
distinct
bekerja dengan string_agg, jadi orang dapat menggunakanstring_agg(distinct some_solumn, ',')
TEXT
jika itu adalah nilai yang tidak dapat dirangkai (mis.uuid
). Ini akan terlihat sepertistring_agg(some_column::text, ',')
Akan melakukannya juga.
sumber
Coba seperti ini:
sumber
dan versi untuk bekerja pada tipe array :
sumber
character varying(5)[]
. Juga, saya telah memverifikasi bahwa untuk tujuan saya - tidak diperlukan diperlukan, jika tidak Anda akan melihatERROR: cannot accumulate arrays of different dimensionality
.Saran saya di postgresql
sumber
ORDER BY
permintaan dalam? Bukankah pemesanan akan hilang juga?Harapan di bawah permintaan Oracle akan berhasil.
sumber