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.