Fungsi GROUP BY dan HAVING pada pengelompokkan pada MySQL

Posted by Labels: at

Fungsi GROUP BY dan HAVING pada pengelompokkan pada MySQL

Database MYSQL merupakan salah perangkat lunak untuk penyimpanan data yang sangat populer untuk saat ini. Salah satu alasan banyak orang memilih MySQL adalah keunggulan dan kelengkapan fitur-fitur di dalamnya. Salah satu fitur dari MySQL adalah dukungan terhadap berbagai fungsi agregat GROUP BY dan HAVING untuk pengelompokkan data. Pada tutorial ini dijelaskan mengenai fitur GROUP BY dan HAVING tersebut, beserta contoh.

Berikut ini ada beberapa fungsi agregat yang ada di MySQL:
1. AVG() yaitu return the average value of the argument
2. BIT_AND() yaitu return bitwise and
3. BIT_OR() yaitu return bitwise or
4. BIT_XOR() yaitu return bitwise xor
5. COUNT(DISTINCT) yaitu return bitwise xor
6. COUNT() yaitu return a count of the number of rows returned
7. GROUP_CONTACT() yaitu return a concatenated string
8. MAX() yaitu return the maximum value
9. MIN() yaitu return the minimum value
10. STD() yaitu return the population standard deviation
11. STDDEV() yaitu return the population standard deviation
12. SUM() yaitu return the sum
13. VARIANCE() yaitu return the population standard variance

Berikut langsung saja kita praktekkan, saya disini memakai commad line interface/terminal. Berikut penjelasannya:
1. Buka terminal CTRL+ALT+T
2. Lalu tuliskan perintah berikut ini:
3. Setelah itu kita membuat database terlebih dahulu, berikut perintahnya:
4. Setelah itu kita masuk ke database, berikut perintahnya:
5. Setelah itu kita membuat tabel didalam database tersebut, berikut perintahnya:
6. Setelah membuat tabel kita akan membuat isi yang didalam tabel, berikut perintahnya:

Disini ada beberapa persoalan yang menggunakan GROUP BY dan HAVING, sebagai berikut ini:
1. Tampilkan rata-rata nilai dari seluruh mahasiswa
Untuk menyelesaikannya tidak perlu menggunakan GROUP BY karena yang diminta adalah seluruh mahasiswa. Untuk mendapatkan rata-rata nilai, kita dapat menggunakan fungsi AVG(). Querynya sebagai berikut:
#SELECT AVG(nilai) as rata_rata FROM nilai;
berikut hasilnya:
2. Tampilkan rata-rata nilai untuk setiap mahasiswa
Karena yang diminta adalah rata-rata untuk setiap mahasiswa, maka kita harus menggunakan GROUP BY untuk mengelompokkan rata-rata berdasarkan field tertentu. Querynyaberikut perintahnya:
#SELECT nim, nama, AVG(nilai) as rata_rata FROM nilai GROUP BY nim;
berikut hasilnya:
3. Tampilkan nilai terbesar dan terkecil untuk setiap mahasiswa
Sebenernya sama saja seperti ketiga diatas, hanya perbedaannya pada fungsi agregat yang digunakan untuk menampilkan nilai terbesar dan terkecil yaitu MAX() dan MIN(). Querya berikut perintahnya:
#SELECT nim, nama, MAX(nilai) as terbesar, MIN(nilai) as terkecil FROM nilai GROUP BY nim;
berikut hasilnya:
4. Tampilkan rata-rata nilai yang didapat mahasiswa untuk setiap matakuliah
Cukup jelas bahwa pada kasus ini, mirip dengan kasus kedua di atas, namun pengelompokkan data berdasarkan matakuliah, bukan berdasarkan mahasiswa. Querynya sebagi berikut:
#SELECT matkul, AVG(nilai) as rata_rata FROM nilai GROUP BY matkul;
berikut hasilnya:
5. Tampilkan rata-rata nilai untuk setiap mahasiswa, yang rata-rata nilainya lebih besar dari 80
Nah pada kasus ke-5 ini yang ingin ditampilkan adalah hanya mahasiswa yang nilainya lebih dari 80. Artinya untuk mahasiswa atas nama “INA” yang mendapat nilai rata-rata 70.4 tidak boleh ditampilkan. Solusinya adalah dengan menambahkan kondisi pada query kasus kedua diatas. Nah, jika kondisi suatu query terkait dengan fungsi agregat, maka kita tidak bisa menggunakan kondisi WHERE. Quernya sebagai berikut:
#SELECT nim, nama, AVG(nilai) as rata_rata FROM nilai GROUP BY nim WHERE AVG(nilai)>80;
berikut hasilnya:
loh kok eror? jangan panik dulu yaaaa.. Lalu bagaimana solusinya jika tidak bisa menggunakan WHERE? MySQL (dan juga database yang lainnya) memiliki struktur kondisi khusus terkait fungsi agregat yaitu HAVING. Berikut hasilnya memakai query HAVING:

Refrensi : http://achmatim.net/2012/04/11/fungsi-group-by-dan-having-untuk-pengelompokkan-data-di-mysql/



2 comments:

Back to Top