Bayangin kamu lagi jadi manajer toko online. Bos kamu tiba-tiba masuk dan nanya: "Berapa total penjualan bulan ini? Produk mana yang paling mahal? Rata-rata harga produk kita berapa?" Nah, kalau database kamu cuma bisa menyimpan data tapi nggak bisa mengolahnya — kamu bakal pusing tujuh keliling, harus hitung manual satu per satu. Di sinilah fungsi agregasi MySQL jadi penyelamat hidupmu. 🎉
Di artikel ke-14 dari seri 28 artikel Belajar Query SQL MySQL ini, kita akan bedah tuntas 5 fungsi agregasi paling penting: COUNT, SUM, AVG, MIN, dan MAX. Semua pakai studi kasus nyata dari database toko online — biar langsung kena feel-nya, bukan cuma teori di atas kertas.
Kamu akan belajar: apa itu fungsi agregasi, kapan dan gimana pakainya, plus tips praktis dari lapangan yang bikin query kamu makin tajam. Kalau kamu udah baca [LINK ARTIKEL SEBELUMNYA] artikel ke-13 tentang WHERE dan HAVING, topik ini bakal makin nyambung. Yuk mulai!
FAKTA MENARIK
Menurut survei Stack Overflow Developer Survey, SQL masih jadi salah satu bahasa yang paling banyak digunakan oleh developer di seluruh dunia — dan fungsi agregasi adalah salah satu fitur yang paling sering dipakai dalam query sehari-hari, terutama untuk laporan bisnis dan analisis data.
Apa Itu Fungsi Agregasi MySQL?
Kalau query biasa itu ibarat kamu membaca satu buku satu per satu, fungsi agregasi MySQL itu ibarat kamu punya asisten yang langsung merangkum seluruh isi perpustakaan dalam hitungan detik. Fungsi agregasi adalah fungsi SQL yang bekerja pada sekelompok baris dan mengembalikan satu nilai tunggal sebagai hasil.
Misalnya, dari 1000 baris data pesanan, kamu mau tahu totalnya? Tinggal pakai SUM(). Mau tahu ada berapa pesanan? Pakai COUNT(). Simpel, cepat, dan powerful!
SELECT COUNT(kolom), -- menghitung jumlah baris SUM(kolom), -- menjumlahkan nilai AVG(kolom), -- rata-rata nilai MIN(kolom), -- nilai terkecil MAX(kolom) -- nilai terbesar FROM nama_tabel WHERE kondisi; -- opsional, filter data dulu
Sekarang kita akan eksplorasi masing-masing fungsi dengan data nyata dari toko online kita. Sebelumnya, ini tabel yang akan kita gunakan:
📦 Tabel: produk
| id_produk | nama_produk | kategori | harga | stok |
|---|---|---|---|---|
| 1 | Laptop Pro X | Elektronik | 12.500.000 | 15 |
| 2 | Mouse Wireless | Aksesori | 185.000 | 120 |
| 3 | Keyboard Mekanikal | Aksesori | 750.000 | 45 |
| 4 | Monitor 4K | Elektronik | 4.200.000 | 20 |
| 5 | Webcam HD | Aksesori | 320.000 | 60 |
COUNT() dan SUM(): Menghitung dan Menjumlahkan Data
COUNT() ibarat kamu menghitung jumlah telur dalam keranjang tanpa peduli isinya. Sedangkan SUM() seperti kamu menghitung total uang di dompet — setiap lembar dijumlahkan. Keduanya adalah fondasi dari fungsi agregasi MySQL yang paling sering kamu butuhkan.
Contoh 1: Menghitung Jumlah Produk
SELECT COUNT(*) AS total_produk, COUNT(id_produk) AS produk_dengan_id FROM produk;
📊 Output:
| total_produk | produk_dengan_id |
|---|---|
| 5 | 5 |
Contoh 2: Total Stok dan Total Nilai Inventori
SELECT SUM(stok) AS total_stok, SUM(harga * stok) AS total_nilai_inventori FROM produk;
📊 Output:
| total_stok | total_nilai_inventori |
|---|---|
| 260 | 278.925.000 |
TIP PRAKTIS
COUNT(*) menghitung semua baris termasuk yang nilai NULL. Sedangkan COUNT(kolom) hanya menghitung baris yang tidak NULL di kolom tersebut. Pilih dengan bijak sesuai kebutuhanmu!
AVG(), MIN(), MAX(): Rata-rata, Nilai Terkecil & Terbesar
Trio ini adalah alat analitik favoritmu. AVG() kayak kamu hitung rata-rata nilai ujian. MIN() dan MAX() langsung tunjukkan si paling murah dan si paling mahal — persis kayak kamu nyari harga terbaik di marketplace. Ketiganya termasuk inti dari fungsi agregasi MySQL yang wajib kamu kuasai.
Contoh 3: Analisis Harga Produk
SELECT AVG(harga) AS rata_rata_harga, MIN(harga) AS harga_termurah, MAX(harga) AS harga_termahal FROM produk;
📊 Output:
| rata_rata_harga | harga_termurah | harga_termahal |
|---|---|---|
| 3.591.000,00 | 185.000 | 12.500.000 |
Contoh 4: Analisis Per Kategori (dengan GROUP BY)
Fungsi agregasi semakin powerful ketika dikombinasikan dengan GROUP BY. Ini memungkinkan kamu mendapat ringkasan per kelompok data:
SELECT kategori, COUNT(*) AS jumlah_produk, AVG(harga) AS rata_rata_harga, MIN(harga) AS harga_min, MAX(harga) AS harga_max FROM produk GROUP BY kategori ORDER BY rata_rata_harga DESC;
📊 Output:
| kategori | jumlah_produk | rata_rata_harga | harga_min | harga_max |
|---|---|---|---|---|
| Elektronik | 2 | 8.350.000,00 | 4.200.000 | 12.500.000 |
| Aksesori | 3 | 418.333,33 | 185.000 | 750.000 |
PERINGATAN
AVG() dan SUM() mengabaikan nilai NULL secara otomatis. Ini bisa mengakibatkan hasil yang tidak akurat jika banyak data kosong. Selalu cek dulu dengan COUNT(*) vs COUNT(kolom) untuk deteksi NULL!
Fungsi Agregasi MySQL dalam Studi Kasus Pesanan Nyata
Teori saja nggak cukup. Sekarang kita masuk ke skenario yang lebih realistis — laporan penjualan dari tabel pesanan. Ini yang sering kamu temui di dunia kerja nyata: bos minta laporan, kamu tinggal jalankan query, beres!
🛒 Tabel: pesanan
| id_pesanan | id_pelanggan | total_harga | status | tgl_pesan |
|---|---|---|---|---|
| 1 | C001 | 12.500.000 | selesai | 2024-01-10 |
| 2 | C002 | 935.000 | selesai | 2024-01-12 |
| 3 | C001 | 4.200.000 | proses | 2024-01-15 |
| 4 | C003 | 185.000 | selesai | 2024-01-18 |
| 5 | C002 | 750.000 | batal | 2024-01-20 |
Contoh 5: Laporan Penjualan Komprehensif
-- Laporan ringkasan hanya untuk pesanan 'selesai' SELECT COUNT(*) AS total_transaksi, SUM(total_harga) AS total_pendapatan, AVG(total_harga) AS rata_rata_transaksi, MIN(total_harga) AS transaksi_terkecil, MAX(total_harga) AS transaksi_terbesar FROM pesanan WHERE status = 'selesai';
📊 Output:
| total_transaksi | total_pendapatan | rata_rata_transaksi | transaksi_terkecil | transaksi_terbesar |
|---|---|---|---|---|
| 3 | 13.620.000 | 4.540.000,00 | 185.000 | 12.500.000 |
🚀 Panduan Praktikum Step-by-Step
Ikuti langkah-langkah ini biar kamu bisa langsung cobain di MySQL-mu sendiri:
Buat Database dan Tabel
Pertama, buat database toko online dan tabel produk seperti yang kita gunakan di atas.
CREATE DATABASE toko_online; USE toko_online; CREATE TABLE produk ( id_produk INT PRIMARY KEY AUTO_INCREMENT, nama_produk VARCHAR(100), kategori VARCHAR(50), harga DECIMAL(15,2), stok INT );
Isi Data Sampel
Masukkan data produk yang sama persis seperti tabel di atas.
INSERT INTO produk (nama_produk, kategori, harga, stok) VALUES ('Laptop Pro X', 'Elektronik', 12500000, 15), ('Mouse Wireless', 'Aksesori', 185000, 120), ('Keyboard Mekanikal', 'Aksesori', 750000, 45), ('Monitor 4K', 'Elektronik', 4200000, 20), ('Webcam HD', 'Aksesori', 320000, 60);
Coba Semua Fungsi Sekaligus
Jalankan satu query mega-ringkasan yang menggabungkan semua 5 fungsi agregasi sekaligus!
SELECT COUNT(*) AS total_produk, SUM(stok) AS total_stok, AVG(harga) AS rata_harga, MIN(harga) AS harga_min, MAX(harga) AS harga_max FROM produk;
Eksplorasi dengan GROUP BY
Setelah basic berhasil, coba kombinasikan dengan GROUP BY untuk analisis per kelompok. Ini adalah level berikutnya yang langsung terasa manfaatnya di dunia nyata!
📋 Tabel Perbandingan Fungsi Agregasi MySQL
| Fungsi | Kegunaan | Tipe Data | Perlakuan NULL | Contoh Use Case |
|---|---|---|---|---|
COUNT() |
Menghitung jumlah baris | Semua tipe | COUNT(*) hitung semua; COUNT(col) skip NULL |
Jumlah produk, pelanggan, pesanan |
SUM() |
Menjumlahkan nilai | Numerik saja | Mengabaikan NULL | Total penjualan, total stok |
AVG() |
Rata-rata nilai | Numerik saja | Mengabaikan NULL | Rata-rata harga, rata-rata transaksi |
MIN() |
Nilai terkecil | Numerik & teks | Mengabaikan NULL | Harga termurah, tanggal paling awal |
MAX() |
Nilai terbesar | Numerik & teks | Mengabaikan NULL | Harga termahal, tanggal terbaru |
💡 Tips & Insight dari Lapangan
💡 TIP #1 — Gunakan ROUND() untuk AVG
Hasil AVG() sering menghasilkan angka desimal panjang seperti 4.540.000,000000. Bungkus dengan ROUND(AVG(harga), 0) supaya tampilannya lebih rapi dan mudah dibaca oleh user non-teknis.
💡 TIP #2 — COUNT(DISTINCT) untuk Data Unik
Mau tahu berapa pelanggan unik yang pernah memesan? Jangan pakai COUNT(*) karena satu pelanggan bisa punya banyak pesanan. Gunakan COUNT(DISTINCT id_pelanggan) untuk hasil yang akurat!
🔥 INSIGHT TRAINER
Dalam project nyata, fungsi agregasi hampir selalu dikombinasikan dengan GROUP BY, HAVING, dan JOIN. Kuasai ketiganya setelah kamu mantap di fungsi agregasi, dan kamu udah punya pondasi yang sangat kuat untuk analisis data apapun!
✅ Kesimpulan
Kamu baru saja menguasai senjata rahasia para data analyst — fungsi agregasi MySQL! Ini rangkuman cepat yang perlu kamu ingat:
- → COUNT() untuk menghitung jumlah baris — pakai
DISTINCTkalau butuh nilai unik - → SUM() untuk total nilai numerik — bisa dikombinasi dengan ekspresi seperti
harga * stok - → AVG() untuk rata-rata — selalu pasangkan dengan
ROUND()biar rapi - → MIN() & MAX() bisa bekerja pada angka maupun teks/tanggal
- → Semua fungsi ini mengabaikan NULL kecuali
COUNT(*)
Ingat, database yang hebat bukan yang cuma menyimpan data, tapi yang bisa bercerita tentang data itu. Dan fungsi agregasi adalah cara database bercerita kepada kita. Sekarang giliranmu untuk berlatih!
💬 Punya pertanyaan atau menemukan query yang menarik? Tulis di kolom komentar! Share artikel ini ke teman-temanmu yang lagi belajar SQL — bantuin mereka skip ngitung manual! Dan jangan lupa bookmark halaman ini supaya gampang balik lagi. 🔖
Artikel Selanjutnya — 15 dari 28
GROUP BY dan HAVING: Mengelompokkan Data Secara Dinamis
Pelajari cara mengelompokkan data dengan GROUP BY dan memfilter hasil agregasi menggunakan HAVING — pasangan sempurna dari fungsi agregasi yang baru kamu pelajari!
No comments:
Post a Comment