Lebih sederhana dengan fungsi agregat string_agg()
(Postgres 9.0 atau lebih baru):
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
1
di GROUP BY 1
adalah referensi posisi dan jalan pintas untuk GROUP BY movie
dalam hal ini.
string_agg()
mengharapkan tipe data text
sebagai masukan. Jenis lain perlu ditransmisikan secara eksplisit (actor::text
) - kecuali pemeran implisit ke text
didefinisikan - yang merupakan kasus untuk semua tipe karakter lainnya (varchar
, character
, "char"
), dan beberapa jenis lainnya.
Seperti yang dikomentari isapir, Anda dapat menambahkan ORDER BY
klausa dalam panggilan agregat untuk mendapatkan daftar yang diurutkan - jika Anda membutuhkannya. Seperti:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1;
Tapi biasanya lebih cepat untuk mengurutkan baris dalam subquery. Lihat:
- Postgres SQL - Buat Array di Select