Fungsi Agregat: COUNT, SUM, AVG, MIN, MAX
Meringkas banyak baris menjadi satu angka: menghitung jumlah, total, rata-rata, nilai terkecil dan terbesar, serta perilaku agregat terhadap NULL.
Analogi: Fungsi agregat itu seperti kasir yang menutup toko: dari tumpukan ratusan struk ia hanya menyerahkan satu ringkasan ("total 14,2 juta, 87 transaksi, rata-rata 163 ribu"). Detail baris hilang, yang tersisa adalah angka keputusan.
Dari banyak baris menjadi satu angka
Bos bertanya: "Berapa jumlah buku kita? Berapa total nilai stok? Berapa harga rata-rata?" Jawabannya bukan daftar, melainkan satu angka ringkasan. Itulah tugas fungsi agregat.
| Fungsi | Menghitung | Contoh |
|---|---|---|
COUNT(*) | jumlah baris | SELECT COUNT(*) FROM buku; |
COUNT(kolom) | jumlah baris yang kolomnya tidak NULL | COUNT(email) |
SUM(kolom) | total | SUM(stok) |
AVG(kolom) | rata-rata | AVG(harga) |
MIN(kolom) / MAX(kolom) | terkecil / terbesar | MAX(harga) |
SELECT COUNT(*) AS total_buku,
SUM(stok) AS total_stok,
ROUND(AVG(harga), 0) AS rata_harga,
MIN(harga) AS termurah,
MAX(harga) AS termahal
FROM buku;
total_buku | total_stok | rata_harga | termurah | termahal
------------+------------+------------+----------+----------
12 | 363 | 69750 | 22000 | 120000
(1 row)
Walau tabelnya 12 baris, hasilnya hanya satu baris.
Agregat dengan WHERE
WHERE dikerjakan sebelum agregasi, jadi kamu bisa meringkas sebagian data saja:
SELECT COUNT(*) AS jumlah_novel, AVG(harga) AS rata_novel
FROM buku
WHERE kategori_id = 1;
Perilaku terhadap NULL (sering keluar di wawancara!)
COUNT(*)menghitung semua baris, termasuk yang berisi NULL.COUNT(email)hanya menghitung baris dengan email tidak NULL.SUM,AVG,MIN,MAXmengabaikan NULL. AVG dari (10, 20, NULL) adalah 15, bukan 10.
SELECT COUNT(*) AS semua, COUNT(email) AS punya_email, COUNT(*) - COUNT(email) AS tanpa_email
FROM pelanggan;
COUNT(DISTINCT ...)
SELECT COUNT(DISTINCT kota) AS jumlah_kota FROM pelanggan; -- kota unik saja
Aturan: kamu tidak bisa mencampur kolom biasa dan agregat dalam SELECT tanpa GROUP BY. SELECT judul, COUNT(*) FROM buku akan error. Solusinya ada di bab berikutnya.
Kasus nyata: dashboard ringkasan untuk pemilik toko
Pemilik toko membuka dashboard setiap pagi. Satu query menjawab semua pertanyaannya:
SELECT COUNT(*) AS jumlah_judul,
SUM(stok) AS total_buku_di_gudang,
SUM(harga * stok) AS nilai_persediaan,
ROUND(AVG(harga), 0) AS harga_rata_rata
FROM buku;Angka-angka inilah yang kelak muncul sebagai kartu KPI di aplikasi BI atau dashboard Laravel.
Kesalahan yang sering terjadi
- Mencampur kolom biasa dan agregat tanpa
GROUP BY. - Mengira
COUNT(kolom)sama denganCOUNT(*). Yang pertama mengabaikan NULL. - Memakai agregat di
WHERE. Syarat atas hasil agregat harus lewatHAVING.