Bahasa SQL‎ > ‎

Fungi GROUP_CONCAT : Menggabungkan String dari Grouping Tertentu

Pendahuluan

Kadang kala kita membuat report kumpulan item dari suatu grouping. Misalkan daftar nama produk dari suatu kategori, tapi dalam bentuk daftar dengan pemisah koma.

Sebagai contoh, misalkan kita memiliki sumber data tabular sebagai berikut :

Data Sumber

nama_kategori      nama_produk                       
Sayur-Sayuran      bawang merah 1kg                  
Sayur-Sayuran      bawang putih 1 kg                 
Sayur-Sayuran      buncis 1 kg                       
Buah               alpukat 1 kg                      
Buah               jeruk 1 kg                        

dan ingin kita hasilkan sebagai berikut

Hasil Query

nama_kategori      nama_produk                       
Sayur-Sayuran      bawang merah 1kg, bawang putih 1 kg, buncis 1 kg                       
Buah               alpukat 1 kg, jeruk 1 kg        

Sebagai solusi pada MySQL kita bisa menggunakan fungsi GROUP_CONCAT.

Fungsi GROUP_CONCAT

Untuk syntax lengkap dari GROUP_CONCAT sebagaimana diambil dari referensi pada situs MySQL adalah sebagai berikut :

GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])

Keterangan
  • [DISTINCT] : digunakan apabila kita ingin mendapatkan hasil koleksi daftar yang unik
  • expr atau expression adalah field atau ekspresi (dari berbagai penggunaan kombinasi field, literal, function maupun operator)
  • [ORDER BY ...] : digunakan apabila kita ingin mengurutkan hasil
  • SEPARATOR : digunakan untuk merinci string pemisah antar tiap item dari daftar

Beberapa Contoh Penggunaan

Berikut adalah beberapa contoh penggunaan dari function GROUP_CONCAT pada database PHI_Minimart dengan hasilnya.

Query SQL Contoh Hasil (Klik Untuk Memperbesar)
SELECT m2.nama_kategori, GROUP_CONCAT(m1.nama_produk) 
FROM ms_produk m1
JOIN ms_kategori m2
ON m1.kode_kategori = m2.kode_kategori
GROUP BY m2.nama_kategori; 
 
SELECT m2.nama_kategori, 
GROUP_CONCAT(m1.nama_produk ORDER BY m1.nama_produk DESC) 
FROM ms_produk m1

JOIN ms_kategori m2
ON m1.kode_kategori = m2.kode_kategori
GROUP BY m2.nama_kategori;
 
SELECT m2.nama_kategori,
GROUP_CONCAT(
   LEFT(m1.nama_produk,5) 
   ORDER BY m1.nama_produk DESC
            ) 
FROM ms_produk m1

JOIN ms_kategori m2
ON m1.kode_kategori = m2.kode_kategori
GROUP BY m2.nama_kategori;




Comments