Memanfaatkan FIND_IN_SET untuk menghasilkan nomor urut per group di MySQL

MySQL Logo

Langsung saja ke kasus, contoh saya mempunyai tabel di database MySQL dengan nama tabel_1 dengan isi sebagai berikut:

kelompok nama
A Adi
A Budi
A Budi
A Cici
B Beni
B Dona
B Joni
B Luki

dari tabel di atas, saya ingin mendapatkan hasil seperti berikut dengan sekali query select,

kelompok nama nom
A Adi 1
A Budi 2
A Budi 3
A Cici 4
B Beni 1
B Dona 2
B Joni 3
B Luki 4

dari hasil di atas terlihat tiap nama mendapatkan nomor urut per kelompok A dan B, dan meski ada nama yang sama tetap mendapatkan nomor urut yang unique per kelompok. Setelah utak atik berikut query select-nya:

SELECT f.kelompok,f.nama,FIND_IN_SET(CONCAT(f.nama,f.no),(SELECT GROUP_CONCAT(CONCAT(nama,nr) ORDER BY kelompok,nama) FROM (SELECT a.*,@nr:=@nr+1 AS nr FROM tabel_1 a, (SELECT @nr:=0) b ORDER BY kelompok,nama) c WHERE c.kelompok = f.kelompok )) AS nom FROM (SELECT d.kelompok,d.nama,@NO:=@NO+1 AS NO FROM tabel_1 d, (SELECT @NO:=0) e ORDER BY 1,2) f ORDER BY 1,2,3

tampak ribet dan panjang, semoga ke depan ada query yang lebih sederhana hehe, sekian dulu dan semoga bermanfaat.

4 thoughts on “Memanfaatkan FIND_IN_SET untuk menghasilkan nomor urut per group di MySQL

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s