Assalamu’alaikum…
Selamat datang
kawan… kali ini saya akan membahas atau mempelajari tentang fungsi
GROUP BY dan HAVING pada SQL. Mungkin kalian belum tau atau sudah tau
terus ingin lebuah memahami lagi fungsi-fungsi tersebut, mari kita
lihat uraian di bawah ini.
Pengertian
Fungsi GROUP BY dan
HAVING sangat berkaitan dengan fungsi agregat. Fungsi agregat
merupakan kelompok fungsi di MySQL yang memungkinkan untuk memiliki
parameter berupa kelompok data.
Ltar
Belakang
Memahami tentang
fungsi GROUP BY dan HAVING.
Uraian
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, disertai contohnya.
Sebagai contoh dari
fungsi agregat adalah fungsi SUM() yang akan menjumlahkan seluruh
nilai yang menjadi parameternya. Contoh lain adalah fungsi MAX() yang
akan menghasilkan nilai terbesar dari keseluruhan nilai yang menjadi
parameternya.
Untuk memudahkan
pemahaman bagaimana fungsi GROUP BY dan HAVING digunakan, kita akan
menggunakan contoh data di MySQL. Buatlah tabel nilai yang menyimpan
data nilai mahasiswa.
Syntax :
CREATE TABLE nilai ( nim varchar(10) NOT NULL, nama varchar(30) NOT NULL, matkul varchar(20) NOT NULL, nilai int(3) NOT NULL); |
Hasil :
Selanjutnya isi tabel tersebut dengan beberapa data. Bagi yang ga mau repot bikin, ini sudah disiapkan perintah untuk bikin tabel dan mengisi datanya :
Syntaks :
CREATE TABLE nilai ( nim VARCHAR(10) not null, nama VARCHAR(30) not null, matkul VARCHAR(20) not null, nilai INT(3) not null, primary key(nim, nama, matkul) ); INSERT INTO `nilai` (`nim`, `nama`, `matkul`, `nilai`) VALUES ('0911500101', 'ADI', 'ALGORITMA', 90), ('0911500102', 'IDA', 'ALGORITMA', 80), ('0911500103', 'EDI', 'ALGORITMA', 85), ('0911500104', 'INA', 'ALGORITMA', 75), ('0911500105', 'ANI', 'ALGORITMA', 92), ('0911500101', 'ADI', 'PTI', 75), ('0911500102', 'IDA', 'PTI', 90), ('0911500103', 'EDI', 'PTI', 88), ('0911500104', 'INA', 'PTI', 72), ('0911500105', 'ANI', 'PTI', 90), ('0911500101', 'ADI', 'KALKULUS', 65), ('0911500102', 'IDA', 'KALKULUS', 70), ('0911500103', 'EDI', 'KALKULUS', 60), ('0911500104', 'INA', 'KALKULUS', 50), ('0911500105', 'ANI', 'KALKULUS', 68), ('0911500101', 'ADI', 'PEMROGRAMAN WEB', 90), ('0911500102', 'IDA', 'PEMROGRAMAN WEB', 85), ('0911500103', 'EDI', 'PEMROGRAMAN WEB', 85), ('0911500104', 'INA', 'PEMROGRAMAN WEB', 80), ('0911500105', 'ANI', 'PEMROGRAMAN WEB', 92), ('0911500101', 'ADI', 'PBO', 90), ('0911500102', 'IDA', 'PBO', 80), ('0911500103', 'EDI', 'PBO', 85), ('0911500104', 'INA', 'PBO', 75), ('0911500105', 'ANI', 'PBO', 80); |
Hasil :
Menampilkan rata-ratanilai 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().
SELECT AVG(nilai) as rata_rata FROM nilai; |
Hasil :
Menampilkan rata-rata nilai untuk setiap mahasiswa
Karena yang diminta adalah rata-ratauntuk setiap mahasiswa, maka kita harus menggunakan GROUP BY untuk mengelompokkan rata-rata berdasarkan field tertentu.
SELECT nim, nama, AVG(nilai) as rata_rata FROM nilai GROUP BY nim; |
Hasil :
Menampilkan
nilai terbesar dan terkecil untuk setiap mahasiswa
Query untuk menyelesaikan kasus ketiga di atas sebenarnya sama saja dengan yang sebelumnya. Perbedaannya hanya pada fungsi agregat yang digunakan untuk menampilkan nilai terbesar dan terkecil yaitu MAX() dan MIN(). Berikut ini query dan hasil query-nya.
SELECT nim, nama, MAX(nilai) as terbesar, MIN(nilai) as terkecil FROM nilai GROUP BY nim; |
Hasil :
Menampilkan
rata-rata nilai yang didapat mahasiswa untuk setiap matakuliah
Syntax :
SELECT matkul, AVG(nilai) as rata_rata FROM nilai GROUP BY matkul; |
Hasil :
Menampilkan
rata-rata nilai untuk setiap mahasiswa, yang rata-rata nilai lebih
besar dari 80
SELECT nim, nama, AVG(nilai) as rata_rata FROM nilai GROUP BY nim WHERE AVG(nilai)>80; |
Lalu bagaimana solusinya jika tidak
bisa menggunakan WHERE ? MySQL (dan juga database yang lainnya)
memiliki struktur kondisi khusus terkait fungsi agregat yaitu HAVING.
Jika query diatas diperbaiki dan menggunakan HAVING, maka hasilnya
sebagai berikut:
SELECT nim, nama, AVG(nilai) as rata_rata FROM nilai GROUP BY nim HAVING AVG(nilai)>80; |
Sebenarnya masih banyak variasi
perintah query di MySQL yang menggunakan fungsi GROUP BY dan HAVING
akan tetapi hanya ini yang saya pelajari dan saya tau.
Semoga bermanfaat… ;)
lebih memahami fungsi pada MySQL.
-
Laptop
-
File Items
-
Phpmyadmin
Tidak ada komentar:
Posting Komentar