MySQL Fungsi Agregat: SUM, COUNT, AVG & MAKS
⚡ Ringkasan Cerdas
Fungsi Agregat di MySQL Melakukan perhitungan di banyak baris dalam satu kolom dan mengembalikan satu nilai ringkasan. Lima fungsi standar ISO — COUNT, SUM, AVG, MIN, dan MAX — menggerakkan hampir setiap laporan yang dihasilkan oleh sebuah basis data.
Apa Itu Fungsi Agregat dalam MySQL?
An fungsi agregat Fungsi agregat membaca banyak baris dari satu kolom dan menggabungkannya menjadi satu nilai. Fungsi agregat pada dasarnya adalah:
- Melakukan perhitungan pada beberapa baris
- Dari satu kolom tabel
- Dan mengembalikan satu nilai.
Standar ISO mendefinisikan lima (5) fungsi agregat, yaitu:
- COUNT
- JUMLAH
- AVG
- MIN
- MAX
Satu aturan berlaku untuk kelimanya: Fungsi agregasi mengabaikan nilai NULL.COUNT(*) adalah satu-satunya pengecualian, dan kita akan melihat alasannya di bawah ini.
Mengapa Menggunakan Fungsi Agregat
Tingkat organisasi yang berbeda memiliki kebutuhan informasi yang berbeda pula. Manajer tingkat atas biasanya tertarik pada angka keseluruhan, bukan detail individu.
Fungsi agregat memungkinkan kami dengan mudah menghasilkan data ringkasan dari database kami.
Sebagai contoh, dari basis data myflix kami, manajemen mungkin memerlukan laporan-laporan berikut:
- Film yang paling sedikit disewa.
- Film yang paling banyak disewa.
- Rata-rata jumlah kali setiap film disewakan dalam sebulan.
Semua laporan di atas berasal dari fungsi agregasi. Mari kita lihat masing-masing secara detail.
fungsi COUNT
Fungsi COUNT mengembalikan jumlah total nilai dalam bidang yang ditentukan, baik untuk tipe data numerik maupun non-numerik. Seperti fungsi agregasi lainnya, COUNT(column) mengecualikan nilai NULL.
COUNT(*) adalah bentuk khusus yang mengembalikan jumlah semua baris dalam sebuah tabel. Fungsi ini juga menghitung NULL dan duplikat, karena menghitung baris, bukan nilai.
Tabel penyewaan film menyimpan data ini:
| nomor referensi | tanggal transaksi | tanggal pengembalian | Nomor keanggotaan | film_id | film_ kembali |
|---|---|---|---|---|---|
| 11 | 20-06-2012 | NULL | 1 | 1 | 0 |
| 12 | 22-06-2012 | 25-06-2012 | 1 | 2 | 0 |
| 13 | 22-06-2012 | 25-06-2012 | 3 | 2 | 0 |
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |
| 15 | 23-06-2012 | NULL | 3 | 3 | 0 |
Misalkan kita ingin mengetahui berapa kali film dengan ID 2 telah disewa.
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
Menjalankan ini di MySQL Workbench Jika dibandingkan dengan myflixdb, hasilnya adalah 3, karena ada tiga baris yang memuat movie_id 2.
| HITUNG(`id_film`) |
|---|
| 3 |
Kata Kunci BERBEDA
COUNT menjawab “berapa banyak”. Pertanyaan selanjutnya biasanya “berapa banyak” berbeda "yang satu", dan itulah tujuan dari DISTINCT.
Kata kunci DISTINCT menghilangkan duplikat dari hasil pencarian kami berdasarkan kelompok.ping nilai-nilai identik disatukan, persis seperti yang ditunjukkan pada ilustrasi di atas.
Pertama, mari kita jalankan kueri sederhana.
SELECT `movie_id` FROM `movierentals`;
| film_id |
|---|
| 1 |
| 2 |
| 2 |
| 2 |
| 3 |
Sekarang, kueri yang sama dengan kata kunci DISTINCT:
SELECT DISTINCT `movie_id` FROM `movierentals`;
DISTINCT menghilangkan data duplikat:
| film_id |
|---|
| 1 |
| 2 |
| 3 |
COUNT vs COUNT(*) vs COUNT(DISTINCT): Mana yang Sebaiknya Anda Gunakan?
DISTINCT juga dapat ditempatkan dalam fungsi agregat, dan di sinilah sebagian besar pemula mengalami kesulitan. track baris mana yang sebenarnya dihitung. Keempat formulir di bawah ini semuanya dijalankan terhadap tabel penyewaan film lima baris yang sama seperti yang ditunjukkan sebelumnya, namun tidak semuanya mengembalikan angka yang sama. Perbedaannya bermuara pada dua pertanyaan: apakah formulir tersebut menghitung baris atau nilai, dan apakah formulir tersebut menyimpan duplikat?
| Bentuk | Apa yang penting | Hasil pencarian di movierentals |
|---|---|---|
| MENGHITUNG(*) | Setiap baris, termasuk duplikat dan baris yang seluruhnya bernilai NULL | 5 |
| HITUNG(`id_film`) | Setiap nilai non-NULL dalam kolom, termasuk nilai duplikat. | 5 |
| HITUNG(`tanggal_kembali`) | Hanya nilai non-NULL — dua tanggal pengembalian NULL dilewati. | 3 |
| HITUNG(ID_film_yang_berbeda) | Hanya nilai unik yang bukan NULL | 3 |
SELECT COUNT(*) AS `all_rows`, COUNT(`return_date`) AS `returned_rows`, COUNT(DISTINCT `movie_id`) AS `unique_movies` FROM `movierentals`;
💡 Kiat: Gunakan COUNT(*) untuk menghitung jumlah baris, COUNT(kolom) jika NULL berarti "tidak berlaku", dan COUNT(kolom DISTINCT) untuk nilai unik. Kebalikan dari DISTINCT adalah ALL — nilai default, dan karena itu jarang dituliskan.
Fungsi MIN
Fungsi MIN mengembalikan nilai terkecil di bidang tabel yang ditentukan.
Misalkan kita ingin mengetahui tahun rilis film tertua di perpustakaan kita. MySQLFungsi MIN dari memberikan kita hal itu.
SELECT MIN(`year_released`) FROM `movies`;
Hasil:
| MIN(`tahun_rilis`) |
|---|
| 2005 |
Fungsi MAX
Seperti namanya, fungsi MAX merupakan kebalikan dari fungsi MIN. Dia mengembalikan nilai terbesar dari bidang tabel yang ditentukan.
Misalkan kita ingin mengetahui tahun rilis film terbaru dalam basis data kita. Contoh berikut akan menampilkannya.
SELECT MAX(`year_released`) FROM `movies`;
Hasil:
| MAX(`tahun_rilis`) |
|---|
| 2012 |
Fungsi SUM
MIN dan MAX memilih nilai yang sudah ada dari sebuah kolom. SUM dan AVG Hitung angka baru dari seluruh kolom.
Misalkan kita ingin mengetahui jumlah total pembayaran yang telah dilakukan hingga saat ini. MySQL JUMLAH fungsi Mengembalikan jumlah semua nilai dalam kolom yang ditentukan.. SUM hanya berfungsi pada bidang numerik, dan Nilai NULL dikecualikan dari hasil..
Tabel berikut menunjukkan data dalam tabel pembayaran.
| pembayaran_ id | Nomor keanggotaan | tanggal pembayaran | deskripsi | jumlah yang dibayarkan | eksternal_ referensi _nomor |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Pembayaran sewa film | 2500 | 11 |
| 2 | 1 | 25-07-2012 | Pembayaran sewa film | 2000 | 12 |
| 3 | 3 | 30-07-2012 | Pembayaran sewa film | 6000 | NULL |
Kueri yang ditunjukkan di bawah ini mengambil semua pembayaran yang telah dilakukan dan menjumlahkannya menjadi satu hasil: 2500 + 2000 + 6000 = 10500.
SELECT SUM(`amount_paid`) FROM `payments`;
Hasil:
| JUMLAH(`jumlah_dibayar`) |
|---|
| 10500 |
AVG fungsi
The MySQL AVG fungsi mengembalikan rata-rata nilai dalam kolom tertentu. Sama seperti fungsi SUM, itu hanya bekerja pada tipe data numerik.
Misalkan kita ingin mencari jumlah rata-rata yang dibayarkan. Kita dapat menggunakan kueri berikut, yang membagi total 10500 dengan tiga baris pembayaran yang tidak bernilai NULL.
SELECT AVG(`amount_paid`) FROM `payments`;
Hasil:
| AVG(`jumlah_dibayar`) |
|---|
| 3500 |
⚠️ Peringatan: AVG Dibagi dengan jumlah baris yang bukan NULL, bukan dengan jumlah baris tabel. Jumlah NULL dilewati dan tidak dihitung sebagai nol, yang secara tidak langsung menaikkan rata-rata. Gunakan AVG(IFNULL(`amount_paid`, 0)) ketika nilai yang hilang berarti nol.
Contoh Praktis: Menggabungkan Fungsi Agregat dengan GROUP BY
Setiap fungsi di atas mengembalikan satu angka untuk seluruh tabel. Menambahkan sebuah KELOMPOK OLEH klausa mengembalikan satu angka per kelompok Sebaliknya — dan begitulah cara laporan yang sebenarnya dibuat.
Contoh berikut mengelompokkan anggota berdasarkan nama, kemudian menghitung jumlah total pembayaran, jumlah pembayaran rata-rata, dan total keseluruhan jumlah pembayaran untuk setiap anggota.
SELECT m.`full_names`, COUNT(p.`payment_id`) AS `paymentscount`, AVG(p.`amount_paid`) AS `averagepaymentamount`, SUM(p.`amount_paid`) AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;
Menjalankan contoh di atas di MySQL Workbench memberikan hasil sebagai berikut.
Kueri tersebut menggabungkan kedua tabel dalam klausa WHERE — gaya penggabungan koma yang lebih lama. Kode modern menulis logika yang sama seperti penggabungan eksplisit. BERGABUNGLAH DALAM … AKTIFPerhatikan juga bahwa setiap kolom yang tidak diagregasi dalam daftar SELECT harus muncul dalam GROUP BY, atau MySQL Versi 5.7 dan yang lebih baru menolak kueri di bawah ONLY_FULL_GROUP_BY. Lihat resmi MySQL referensi fungsi agregat.



