MySQL Group Concat untuk String

Fungsi GROUP _CONCAT adalah fungsi agregat GROUP BY yang memungkinkan Anda untuk menggabungkan nilai kolom dari beberapa baris ke dalam satu bidang. Ini mengembalikan string jika grup yang ditetapkan berisi satu atau tanpa nilai kolom nol dan mengembalikan nilai NULL jika tidak ada yang dapat ditemukan.

Tutorial ini akan mengajarkan Anda cara menggunakan fungsi MySQL GROUP_CONCAT() untuk menggabungkan string dari grup dengan beberapa opsi.

Penggunaan Dasar

Seperti yang telah kami sebutkan, fungsi ini mengembalikan hasil string dengan nilai gabungan nilai non-null atau NULL jika tidak ada.

Sintaks umumnya adalah:

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

Penjelasan

Dari sintaks di atas, Anda dapat melihat bahwa fungsi GROUP_CONCAT menggunakan klausa dan batasan MySQL untuk menentukan berbagai opsi:

  1. DISTINCT:Klausa DISTINCT membantu menghapus nilai duplikat dalam grup yang ditetapkan sebelum proses penggabungan. Pertimbangkan tutorial kami yang menjelaskan MySQL DISTINCT untuk memahami cara kerjanya.
  2. ORDER BY:Klausa berikutnya adalah ORDER BY yang membantu mengurutkan nilai dalam urutan tertentu. Urutannya bisa naik atau turun. Jika tidak ada urutan yang ditentukan, MySQL memformat nilai dalam urutan menaik.
  3. SEPARATOR: Klausa ini menetapkan literal string yang disisipkan di antara nilai grup pada proses penggabungan. Secara default, MySQL menggunakan koma (,) untuk memisahkan nilai.

CATATAN: Hasil string yang dihasilkan oleh fungsi MySQL GROUP_CONCAT() terbatas pada panjang nilai yang ditetapkan dalam variabel group_concat_max_len. Nilai ini ditentukan dalam sistem dan memiliki nilai default 1024. Anda dapat mengubah nilai ini secara global atau menyetelnya dalam sesi yang Anda perlukan.

SET [GLOBAL | SESSION] group_concat_max_len = value;

Pertimbangkan referensi di bawah ini untuk mempelajari lebih lanjut:

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len

Cara Kerjanya: Contoh

Izinkan saya menggunakan contoh sederhana untuk menjelaskan cara kerja fungsi GROUP_CONCAT(). Pertimbangkan tabel dengan bidang untuk CHAR sebagai:

CREATE TABLE concat (value CHAR);

Mari kita masukkan nilai ke dalam tabel seperti yang ditunjukkan pada kueri di bawah ini:

INSERT INTO concat(value) VALUES('H'),('E'),('L'),('L'),('O');

Jika kita melakukan operasi dasar GROUP_CONCAT pada nilai-nilai dalam tabel, kita akan mendapatkan hasil string seperti yang ditunjukkan di bawah ini:

SELECT GROUP_CONCAT(DISTINCT value ORDER BY value ASC SEPARATOR " ") FROM concat;

Nilai yang dihasilkan adalah:

+---------------------------------------------------------------+
| GROUP_CONCAT(DISTINCT value ORDER BY value ASC SEPARATOR " ") |
+---------------------------------------------------------------+
| E H L O |
+---------------------------------------------------------------+
1 row in set (0.01 sec)

Apakah Anda ingin cara lain untuk memahami apa yang terjadi pada hasil yang diberikan di atas?

Kami mulai dengan menghapus semua nilai duplikat karena klausa MySQL DISTINCT yang menghapus satu L.

Selanjutnya, kita lanjutkan ke ORDER BY ascending order seperti yang didefinisikan dalam (ASC), yang mengubah string dalam bentuk

HELO -> EHLO

Terakhir, kami melakukan proses penggabungan menggunakan spasi sebagai pemisah untuk nilai yang ditetapkan, menghasilkan string EHLO dari {H, E, L, LO}.

Contoh Kasus Penggunaan

Mari kita ambil database nyata dan menggunakannya untuk mengilustrasikan bagaimana kita dapat mengimplementasikan fungsi GROUP_CONCAT(). Dalam contoh ini, kita akan menggunakan database Sakila, dan khususnya, tabel alamat dari database Sakila.

Pertimbangkan sumber daya di bawah ini untuk mengdownload database untuk contoh Anda:

https://dev.mysql.com/doc/index-other.html

Di tabel alamat database Sakila, Anda akan mendapatkan kolom distrik. Kita bisa mendapatkan semua distrik unik yang dipisahkan oleh pipa seperti yang ditunjukkan pada kueri di bawah ini:

SELECT GROUP_CONCAT(DISTINCT district ORDER BY district SEPARATOR "|") FROM sakila.address LIMIT 5;

Kueri di atas akan menampilkan semua distrik DISTINCT dan mengurutkannya dalam urutan menaik yang dipisahkan oleh pipa.

CATATAN: Fungsi GROUP_CONCAT() adalah fungsi agregat. Oleh karena itu, Anda harus menentukan pernyataan ORDER BY di dalam fungsi dan bukan dalam pernyataan SELECT.

Kesimpulan

Fungsi MySQL GROUP_CONCAT() yang dibahas dalam tutorial ini adalah fungsi berguna yang memungkinkan Anda membuat data unik, terurut, dan terorganisir dari tabel yang mungkin berisi data duplikat dan tidak berurutan.

Pertimbangkan dokumen atau tutorial MySQL kami yang lain untuk mempelajari lebih lanjut.

Related Posts