Bertahun-tahun kemudian, kita harus meninggalkan variabel yang bermutasi di dalam select
pernyataan, karena sejak MySQL 8 kita dapat menggunakan cara standar, dengan fungsi jendela:
with base as (
select dep,
empnam,
count(*) over (partition by dep order by empnam) num
from t)
select dep,
group_concat(concat(num, '.', empnam) separator ', ') emps
from base
group by dep
Lihat db-fiddle
Jawaban asli (2016)
Anda dapat melakukan ini di sisi aplikasi, tetapi di MySQL 5.7 dimungkinkan. Dalam kueri berikut, saya menganggap Anda mengelompokkan nama berdasarkan sesuatu, misalnya departemen mereka (saya menyebutnya dep ). Ini untuk menggambarkan bahwa penghitung dimulai dari 1 untuk setiap grup baru.
select dep,
group_concat(
concat(@i := if (@grp = dep, @i + 1, if(@grp := dep,1,1)), '.', empnam)
separator ', ') emps
from t,
(select @i := 0, @grp := '') init
group by dep;
Lihat SQL fiddle atau db-fiddle .
Pastikan untuk memasukkan nama tabel Anda di from
klausa, dan untuk menggunakan bidang aktual yang ingin Anda kelompokkan. Jika Anda memiliki beberapa bidang untuk dikelompokkan, ekspresi ditetapkan ke @i akan perlu berubah. Misalnya, Anda dapat menggabungkan nilai yang mendefinisikan grup.
Dengan menggunakan pemisah dua karakter, Anda memastikan ada spasi di antara setiap nama.