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.

Part 13 dari 25 ± 30 menit Gratis

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.

FungsiMenghitungContoh
COUNT(*)jumlah barisSELECT COUNT(*) FROM buku;
COUNT(kolom)jumlah baris yang kolomnya tidak NULLCOUNT(email)
SUM(kolom)totalSUM(stok)
AVG(kolom)rata-rataAVG(harga)
MIN(kolom) / MAX(kolom)terkecil / terbesarMAX(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, MAX mengabaikan 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 dengan COUNT(*). Yang pertama mengabaikan NULL.
  • Memakai agregat di WHERE. Syarat atas hasil agregat harus lewat HAVING.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X