Cara menggunakan mysql concat_ws group by

SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;

: - Di MySQL, Anda bisa mendapatkan nilai gabungan dari kombinasi ekspresi. Untuk menghilangkan nilai duplikat, gunakan klausa DISTINCT . Untuk mengurutkan nilai dalam hasil, gunakan klausa ORDER BY. Untuk mengurutkan dalam urutan terbalik , tambahkankata kunci DESC (descending) ke nama kolom yang Anda sortir dalam klausa ORDER BY. Standarnya adalah urutan naik; ini dapat ditentukan secara eksplisit menggunakan kata kunci ASC. Pemisah default antara nilai-nilai dalam suatu grup adalah koma (","). Untuk menentukan pemisah secara eksplisit, gunakan SEPARATOR diikuti dengan nilai literal string yang harus dimasukkan di antara nilai grup. Untuk menghilangkan pemisah sama sekali, tentukan SEPARATOR '' .

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

ATAU

mysql> SELECT student_name,
    ->     GROUP_CONCAT(DISTINCT test_score
    ->               ORDER BY test_score DESC SEPARATOR ' ')
    ->     FROM student
    ->     GROUP BY student_name;

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([BERBEDA] expr [,expr...]
[DIPESAN OLEH{unsigned_integer | col_name | expr}
[ASC|DESC][,nama_kol...]]
[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. BERBEDA: 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. DIPESAN OLEH: 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 mengaturnya di sesi yang Anda butuhkan.

MENGATUR[GLOBAL|SIDANG] group_concat_max_len =nilai;

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:

MEMBUATMEJAconcat(nilaiARANG);

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

MEMASUKKANKE DALAMconcat(nilai)NILAI('H'),('E'),('L'),('L'),('HAI');

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

PILIHGROUP_CONCAT(BERBEDAnilaiDIPESAN OLEHnilaiASC SEPARATOR " ")DARIconcat;

Nilai yang dihasilkan adalah:

++
|GROUP_CONCAT(BERBEDAnilaiDIPESAN OLEHnilaiASC SEPARATOR " ")|
++
| E H L O |
++
1 baris di dalammengatur(0.01 detik)

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

Cara menggunakan mysql concat_ws group by

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

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

HALO -> EHLO

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

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 mengunduh 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:

PILIHGROUP_CONCAT(BERBEDA daerah DIPESAN OLEH SEPARATOR kabupaten "|")DARI sakila.alamat MEMBATASI5;

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.