0Pricing
SQL Academy · Pelajaran

Jebakan Umum: NULL dalam Agregat

Hindari jebakan NULL klasik: AVG mengabaikan NULL, COUNT(kolom) melewati NULL, serta kejutan saat mengelompokkan kolom yang dapat bernilai NULL.

Jebakan Umum: NULL dalam Agregat adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.

Agregasi Mengabaikan NULL

Setiap fungsi agregat selain COUNT(*) mengabaikan input NULL. Terkadang ini memang yang Anda inginkan—tetapi terkadang juga merupakan bug.

Jebakan Klasik: COUNT(*) vs COUNT(col)

Hasilnya berbeda ketika kolom berisi NULL:

SELECT COUNT(*)         FROM users;      -- 1000
SELECT COUNT(email)     FROM users;      -- 950  (50 users have NULL email)

Bug: AVG Tidak Menganggap NULL sebagai Nol

Rating [5, 5, NULL] → AVG = 5, bukan (5+5+0)/3 = 3,33. Pastikan Anda menentukan perilaku yang memang diinginkan.

SELECT AVG(rating) FROM reviews;        -- 5
SELECT AVG(COALESCE(rating, 0)) FROM reviews;   -- 3.33

Tabel Kosong = Agregasi NULL

Jika tidak ada baris yang cocok, SUM/AVG/MIN/MAX mengembalikan NULL, bukan 0. Tangani kondisi ini dengan COALESCE:

SELECT COALESCE(SUM(total), 0) AS revenue
FROM orders
WHERE user_id = 999999;       -- safe even when user has no orders

SUM pada Kolom NULL

Jika nilai di setiap baris adalah NULL, SUM mengembalikan NULL—bukan 0. Ini adalah jebakan yang sama.

GROUP BY dengan Kunci Pengelompokan NULL

NULL membentuk grupnya sendiri:

SELECT country, COUNT(*) FROM users
GROUP BY country;
-- → ('US', 100), ('CA', 30), (NULL, 5)

Menghitung Nilai Berbeda dengan NULL

COUNT(DISTINCT col) mengabaikan NULL:

INSERT INTO t (c) VALUES (1),(2),(NULL),(NULL),(2);
SELECT COUNT(DISTINCT c) FROM t;   -- 2 (NULL not counted)

DISTINCT pada Banyak Kolom

Tuple yang berisi NULL tetap berbeda dari tuple lain yang memiliki kolom non-NULL yang sama:

SELECT COUNT(*) FROM (
  SELECT DISTINCT a, b FROM t
) sub;

Waspadai Penggabungan Implisit dengan Tabel Opsional

LEFT JOIN dapat memperkenalkan NULL yang mengubah hasil agregasi Anda. Tentukan apakah baris tersebut ingin dihitung atau disaring:

SELECT u.id, COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id;          -- COUNT(o.id) gives 0 for users with no orders

FILTER untuk Penghitungan Bersyarat

FILTER lebih mudah dibaca daripada CASE di dalam SUM:

SELECT COUNT(*) FILTER (WHERE status = 'paid') AS paid_count,
       COUNT(*) FILTER (WHERE status = 'refunded') AS refund_count
FROM orders;

Selalu Uji Agregasi dengan NULL

Saat menambahkan kueri agregasi baru, jalankan kueri tersebut pada contoh data yang mencakup NULL. Bug hampir tidak pernah muncul dalam data pengujian yang bersih.

Ringkasan

NULL dan agregasi merupakan sumber bug SQL yang paling umum.

  • Agregasi mengabaikan NULL, kecuali COUNT(*)
  • Hasil kosong → NULL, bukan 0
  • Bungkus dengan COALESCE jika Anda menginginkan 0
  • Periksa agregasi LEFT JOIN dengan cermat

Pemeriksaan Singkat

Reviews memiliki rating [5, 5, NULL, 1]. Apa hasil AVG(rating)?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Jebakan Umum: NULL dalam Agregat” gratis?

Ya — teks lengkap “Jebakan Umum: NULL dalam Agregat” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Jebakan Umum: NULL dalam Agregat”?

Hindari jebakan NULL klasik: AVG mengabaikan NULL, COUNT(kolom) melewati NULL, serta kejutan saat mengelompokkan kolom yang dapat bernilai NULL. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Academy?

Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Jebakan Umum: NULL dalam Agregat” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. COUNT, SUM, AVG, MIN, MAX
  2. GROUP BY untuk Satu dan Banyak Kolom
  3. HAVING vs WHERE
  4. Jebakan Umum: NULL dalam Agregat
← Kembali ke SQL Academy