Disaat kita ingin melihat kumpulan data dalam suatu grup data dengan lebih informatif, kita bisa menggunakan fungsi yang disediakan oleh MySQL yaitu Group_Concat.
Apa itu Group_Concat?
Group_Concat adalah sebuah function atau fungsi yang mengembalikan nilai berupa string yang sudah digabungkan dari suatu grup data.Untuk melakukan group_concat, query yang kita buat harus di grouping atau dikelompokkan terlebih dahulu
Pada contoh ini saya menggunakan 2 tabel yaitu tabel pegawai (t_employee) dan tabel skill atau keahlian (t_skill). Kita akan menampilkan data semua pegawai dengan keahlian nya masing-masing. Kita akan belajar bagaimana cara menggunakan fungsi group_concat di MySQL.
Terlihat bahwa setiap pegawai mempunyai keahlian lebih dari 1 (perhatikan id_employee nya).
Syntax Group_Concat
GROUP_CONCAT(DISTINCT expression
ORDER BY expression
SEPARATOR symbol);
Query yang kita gunakan adalah :
SELECT A.NAMA_EMPLOYEE,
GROUP_CONCAT(DISTINCT B.NAMA_SKILL
ORDER BY B.NAMA_SKILL
SEPARATOR ',')
FROM T_EMPLOYEE A
JOIN T_SKILL B
ON A.ID_EMPLOYEE = B.ID_EMPLOYEE
GROUP BY (A.ID_EMPLOYEE)
Hasilnya sebagai berikut :
Data yang ditampilkan adalah semua keahlian masing-masing pegawai dalam satu kolom atau field memanjang dengan diurutkan berdasarkan nama skillnya dan dikelompokkan berdasarkan id pegawainya (lihat query group_by(a.id_employee) dibawah) sehingga lebih informatif.
Separator atau pemisah setiap data adalah "koma" dan dilakukan distinct untuk menghindari adanya duplikasi data. Sedangkan untuk mengubah nama kolom disebelah kanan (yang masih berupa query), bisa digunakan alias seperti berikut :
GROUP_CONCAT(DISTINCT B.NAMA_SKILL
ORDER BY B.NAMA_SKILL
SEPARATOR ',') AS KEAHLIAN
Hasilnya seperti berikut (terlihat lebih rapih):
Jika kita tidak menggunakan fungsi group_concat dan hanya melakukan grouping biasa dengan fungsi group_by, maka hasil yang didapatkan seperti berikut :
data keahlian atau skill yang muncul hanyalah satu baris, mengapa bisa begitu? karena jika hanya dilakukan grouping atau pengelompokkan biasa, data skill yang tampil hanya data atau row pertama. Bisa dilihat bahwa Pegawai 1 hanya mempunyai data skill berupa MySQL (di tabel t_skill berada pada id_skill 1 atau yang paling awal), begitu juga Pegawai 2 dan seterusnya.
Dan jika kita tidak melakukan grouping dan memakai group_concat, maka hasil yang didapat sebagai berikut :
Semoga Bermanfaat
Artikel ini dibuat oleh Yudha Tri Putra sebagai penulis artikel, diperbolehkan menyalin artikel ini secara utuh tanpa mengubah atau menambah isi artikel.