Categories: MySQL

MySQL JOIN dan COUNT dari dua table yang berbeda

Bismillaahirrohmaanirrohiim…

Andai saya punya tabel yang memerlukan untuk menghitung jumlah pada tabel lain, di MySQL kita bisa gunakan query JOIN dan COUNT secara langsung.

Bisa juga menggunakan query COUNT pada setiap iterasi data, tapi hal ini akan memakan banyak resource, bayangkan jika ada 100 data saja, maka paling tidak akan melakukan query sebanyak 101.

Bisa juga menggunakan query JOIN yang didalamnya ada query lagi, misalnya SELECT kemudian LEFT JOIN (SELECT * dst…). Query dalam query ini memang cuma satu query yang dieksekusi namun tetap saja akan menghabiskan resource yang besar.

Optimasi query pada MySQL akan sangat penting dan terasa saat data sudah banyak, ini yang seringkali programmer sepelekan dengan perkataan “sing penting jalan”, “yang penting jadi”, dst.

Padahal saat digunakan performance dari sebuah aplikasi akan diuji saat data sudah semakin membesar.

Nah, balik lagi ke materi. Untuk mendapatkan nilai COUNT/SUM dari tabel lain, perhatikan contoh berikut:

misalkan kita punya data
tabel: user
user_id|nama
1|ardi
2|nina


tabel: user_hobi
hobi_id|user_id|hobi
1|1|makan
2|1|baca
3|1|tidur
4|2|renang
5|2|basket

Target hasil query
user_id|nama|jumlah_hobi
1|ardi|3
2|nina|2

Maka query mysql yang efektif untuk menghasilkan data seperti contoh diatas adalah sebagai berikut:

SELECT u.*, COUNT(uh.user_id) AS jumlah_hobi
FROM user AS u
LEFT JOIN user_hobi AS uh USING(user_id)
where u.nama != ''
GROUP BY u.user_id
HAVING jumlah_hobi > 0
order by jumlah_hobi, u.user_nama
LIMIT 10,0

Sebenarnya query pada kasus ini tidak memerlukan WHERE, HAVING, USING, LIMIT.
Sengaja query saya sertakan WHERE, HAVING, USING, LIMIT agar jika ternyata kompleks hal ini akan berguna.

USING(user_id) : artinya kolom yang di JOIN sama-sama bernama “user_id“, jika beda nama maka harus di buat begini misalnya:
LEFT JOIN user_hobi AS uh ON (u.user_id=uh.user_idhobi).

HAVING jumlah_hobi > 0 : HAVING disini digunakan untuk memfilter parameter dari perhitungan kolom atau gabungan dari nilai-nilai pada baris.
kalau query WHERE, biasanya digunakan untuk memfilter nilai dari suatu kolom. Disini kita menggunakan query WHERE dan HAVING sekaligus.

Untuk mendapatkan performa yang lebih efisien, tidak menghabiskan banyak resource, dan optimasi query, pastikan kolom yang di JOIN merupakan primary key.

Demikian semoga bermanfaat

Bagikan
rasupe

View Comments

Recent Posts

CPU usage tinggi pada server

Bismillaahirrohmaanirrohiim... Untuk mendeteksi cpu usage tinggi memang perkara rumit, adakalanya karena codingan bermasalah, akses ke…

2 weeks ago

Membersihkan log mongodb yang besar

Bismillaahirrohmaanirrohiim... Jika tidak dirawat dan dicek berkala, log mongodb akan semakin membesar. Bahkan sampai menghabiskan…

4 weeks ago

Cara mengakses gps di HP dengan javascript

Bismillaahirrohmaanirrohiim... Jika kita membuat website yang digunakan untuk memantau lokasi HP client, maka kita memerlukan…

4 months ago

Menghitung jarak dua titik koordinat dengan php dan javascript

Bismillaahirrohmaanirrohiim... Kali ini kita akan mencoba menerapkan rumus trigonometeri dari formula haversine, yang digunakan untuk…

4 months ago

Kemasan cleo botol kecil sering bikin tangan terluka

Bismillaahirrohmaanirrohiim... Disini saya akan berbagi pengalaman tentang susahnya membuka tutup botol cleo kecil ukuran 220ml.…

4 months ago

Solusi InsCek pada meteran PLN

Bismillaahirrohmaanirrohiim... Kali ini saya akan berbagi pengalaman tentang mati lampu yang disebabkan oleh permasalahan arus…

4 months ago