Beberapa RDBMS seperti MySQL dan MariaDB memiliki GROUP_CONCAT()
fungsi yang memungkinkan Anda mengembalikan kolom kueri sebagai daftar yang dibatasi (misalnya, daftar yang dipisahkan koma).
PostgreSQL memiliki fungsi serupa yang disebut STRING_AGG()
. Fungsi ini bekerja dengan cara yang hampir sama dengan GROUP_CONCAT()
bekerja di MySQL dan MariaDB.
Contoh
Berikut adalah contoh dasar untuk mendemonstrasikan bagaimana STRING_AGG()
PostgreSQL fungsi berfungsi:
SELECT STRING_AGG(genre, ',') FROM Genres;
Hasil:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Inilah yang terjadi jika kita hanya melakukan kueri tanpa STRING_AGG()
fungsi:
SELECT genre FROM Genres;
Hasil:
+---------+ | genre | +---------+ | Rock | | Jazz | | Country | | Pop | | Blues | | Hip Hop | | Rap | | Punk | +---------+ (8 rows)
Kami mendapatkan delapan baris, masing-masing dengan nilai terpisah, bukan satu baris panjang yang dipisahkan koma dari semua nilai.
Jika ada, STRING_AGG()
PostgreSQL lebih seperti GROUP_CONCAT()
MySQL daripada fungsi MariaDB dengan nama yang sama. Saya mengatakan ini karena GROUP_CONCAT()
MariaDB memungkinkan kami untuk memberikan LIMIT
klausa (seperti dari MariaDB 10.3.3), langsung dari dalam fungsi itu sendiri. MySQL GROUP_CONCAT()
tidak mendukung LIMIT
klausa, dan begitu juga dengan STRING_AGG()
PostgreSQL fungsi (setidaknya, tidak pada saat penulisan ini).
Perbedaan lainnya adalah STRING_AGG()
PostgreSQL membutuhkan argumen kedua (yang menentukan pembatas yang akan digunakan). Baik MySQL dan MariaDB menjadikan ini opsional dengan GROUP_CONCAT()
fungsi.
STRING_AGG()
Postgres menerima ORDER BY
klausa, dan DISTINCT
klausa (seperti halnya GROUP_CONCAT()
MariaDB dan MySQL fungsi).
Lihat STRING_AGG()
Fungsi di PostgreSQL untuk contoh lainnya.
Dan jika Anda tertarik, SQL Server juga memiliki STRING_AGG()
fungsi yang bekerja dengan cara yang hampir sama.