0Pricing
Coding Interview Prep · Pelajaran

SUM dan AVG dengan NULL

Mengapa AVG mengabaikan NULL dan bagaimana hal itu mengubah jawaban yang diharapkan pewawancara.

SUM dan AVG dengan NULL adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 2 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 Coding Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Coding Interview Prep mencakup 4 pelajaran total.

Jebakan yang Tersembunyi dalam AVG

Berikut pertanyaan klasik dalam wawancara yang dapat menjatuhkan kandidat yang kurang teliti: "Anda memiliki kolom gaji dengan beberapa NULL. Apa yang dihitung oleh AVG(salary), dan apakah hasilnya sesuai dengan kebutuhan bisnis?"

Jawaban yang jujur menunjukkan apakah Anda memahami bahwa agregat mengabaikan NULL, sehingga penyebut dalam rata-rata berubah. Jika Anda salah memahami hal ini dalam sistem produksi, rata-rata yang dilaporkan dapat meningkat tanpa disadari.

Mari kita perjelas perilaku ini.

Data Contoh

Gunakan tabel employees dengan kolom bonus yang dapat berisi NULL sepanjang pelajaran ini:

  • Alice, bonus 100
  • Bob, bonus 200
  • Carol, bonus NULL
  • Dan, bonus 300

Ada empat baris, tiga bonus yang bukan NULL, dan satu NULL. Kita akan menjalankan SUM dan AVG pada data ini dan mengamati cara NULL diperlakukan.

SUM Mengabaikan NULL

SUM(bonus) hanya menjumlahkan nilai yang bukan NULL: 100 + 200 + 300 = 600. Baris yang bernilai NULL tidak menyumbang apa pun; baris tersebut dilewati, bukan diperlakukan sebagai nol dalam arti aritmetika yang mengubah jumlah data.

Dampak praktisnya sama seperti menganggap NULL tidak ada. SUM tidak pernah menghasilkan galat karena NULL dan tidak pernah mengembalikan NULL kecuali semua masukan bernilai NULL.

SELECT SUM(bonus) AS total_bonus
FROM employees;
-- returns 600

AVG Juga Mengabaikan NULL

AVG(bonus) adalah bagian yang sangat penting. Fungsi ini menghitung jumlah nilai yang bukan NULL dibagi jumlah nilai yang bukan NULL: 600 / 3 = 200.

Penyebutnya adalah 3, bukan 4. Baris yang bernilai NULL dikecualikan dari pembilang maupun penyebut. Inilah alasan AVG dapat mengejutkan banyak orang: rata-rata dihitung berdasarkan nilai yang ada, bukan semua baris.

SELECT AVG(bonus) AS avg_bonus
FROM employees;
-- 600 / 3 = 200, NOT 600 / 4 = 150

Mengapa Penyebut Penting

Misalkan makna bisnis bonus NULL adalah "tidak menerima bonus" = 0. Dalam hal ini, rata-rata yang sebenarnya seharusnya 600 / 4 = 150, tetapi AVG(bonus) melaporkan 200.

Jawaban yang tepat dalam wawancara: "AVG mengabaikan NULL, sehingga rata-rata dihitung berdasarkan karyawan yang memiliki bonus. Jika NULL berarti nol, saya harus mengubah NULL menjadi 0 terlebih dahulu." Menyebutkan perbedaan ini adalah hal yang membuat Anda mendapatkan nilai.

Mengubah NULL Menjadi Nol dengan COALESCE

Untuk menghitung rata-rata semua baris dengan memperlakukan NULL sebagai 0, bungkus kolom tersebut dalam COALESCE(bonus, 0). Sekarang setiap baris memiliki nilai numerik, sehingga penyebutnya menjadi 4.

Hasilnya adalah 600 / 4 = 150. Pelajarannya: AVG(col) dan AVG(COALESCE(col, 0)) menjawab pertanyaan bisnis yang berbeda. Pilihlah dengan sengaja.

SELECT AVG(COALESCE(bonus, 0)) AS avg_over_all
FROM employees;
-- 600 / 4 = 150

AVG = SUM / COUNT, dengan Cermat

Identitas yang berguna: AVG(col) sama dengan SUM(col) / COUNT(col) — perhatikan bahwa yang digunakan adalah COUNT(col), bukan COUNT(*), karena AVG dan COUNT tersebut sama-sama melewati NULL.

Jika Anda keliru menulis SUM(col) / COUNT(*), Anda mendapatkan rata-rata seluruh baris (150 dalam contoh ini), yang berbeda dari AVG (200). Pewawancara terkadang meminta Anda menghitung ulang AVG secara manual untuk melihat apakah Anda memilih COUNT yang tepat.

SELECT
  AVG(bonus)                       AS builtin_avg,   -- 200
  SUM(bonus) * 1.0 / COUNT(bonus)  AS manual_avg,    -- 200
  SUM(bonus) * 1.0 / COUNT(*)      AS over_all_rows  -- 150
FROM employees;

Jebakan Pembagian Bilangan Bulat

Ada kesalahan yang halus saat menghitung rata-rata secara manual: dalam banyak basis data, membagi dua bilangan bulat menghasilkan pembagian bilangan bulat, yang memotong bagian desimal. 7 / 2 dapat menghasilkan 3, bukan 3,5.

AVG sendiri biasanya mengembalikan bilangan desimal, tetapi jika Anda membangunnya kembali dengan SUM / COUNT pada kolom bilangan bulat, Anda mungkin kehilangan presisi. Kalikan dengan 1.0 atau konversikan terlebih dahulu ke tipe desimal.

SELECT
  SUM(bonus) / COUNT(bonus)        AS maybe_truncated,
  SUM(bonus) * 1.0 / COUNT(bonus)  AS precise
FROM employees;

Saat Semuanya NULL

Kasus khusus yang disukai pewawancara: bagaimana jika semua nilai adalah NULL, atau kondisi penyaringan tidak cocok dengan baris apa pun?

  • SUM mengembalikan NULL (bukan 0) jika tidak ada masukan yang bukan NULL.
  • AVG juga mengembalikan NULL, karena pembagian dengan jumlah nol tidak terdefinisi.
  • Sebaliknya, COUNT mengembalikan 0.

Gunakan COALESCE(SUM(col), 0) pada hasil jika Anda memerlukan nilai bawaan numerik.

SELECT COALESCE(SUM(bonus), 0) AS safe_total
FROM employees
WHERE 1 = 0;  -- no rows: returns 0, not NULL

Rata-rata per Grup

Aturan NULL yang sama berlaku di dalam GROUP BY. AVG setiap grup dibagi berdasarkan jumlah nilai yang bukan NULL dalam grup tersebut. Grup yang seluruh bonusnya NULL menghasilkan AVG = NULL untuk grup itu.

Jadi, ketika Anda melihat rata-rata per departemen yang mengejutkan, curigai NULL yang mengurangi penyebut tiap grup sebelum mencurigai kesalahan pada penggabungan.

SELECT department, AVG(bonus) AS avg_bonus
FROM employees
GROUP BY department;

Cara Merumuskan Jawaban

Jawaban wawancara yang tersusun baik terdengar seperti ini: "SUM dan AVG sama-sama mengabaikan NULL. AVG membagi berdasarkan jumlah nilai yang bukan NULL, sehingga NULL secara efektif mengurangi penyebut. Jika NULL seharusnya dihitung sebagai nol, saya mengubahnya dengan COALESCE sebelum melakukan agregasi; jika tidak, rata-rata hanya mencerminkan baris yang memiliki nilai."

Satu kalimat ini menunjukkan ketepatan, pemahaman bisnis, dan solusinya.

Pemeriksaan Singkat

Terapkan aturan tersebut pada data contoh.

Rangkuman

Kesimpulan utama tentang SUM dan AVG dengan NULL:

  • Keduanya sepenuhnya mengabaikan NULL.
  • AVG(col) = SUM(col) / COUNT(col) — penyebutnya tidak menyertakan NULL.
  • Gunakan COALESCE(col, 0) ketika NULL berarti nol dan harus dihitung.
  • Masukan yang seluruhnya NULL atau tidak memiliki baris membuat SUM dan AVG mengembalikan NULL (COUNT mengembalikan 0).
  • Waspadai pembagian bilangan bulat saat membangun kembali AVG secara manual.

Selanjutnya: MIN, MAX, dan agregasi data non-numerik.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “SUM dan AVG dengan NULL” gratis?

Ya — teks lengkap “SUM dan AVG dengan NULL” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Coding Interview Prep, upgrade ke CoddyKit PRO. Kursus Coding Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “SUM dan AVG dengan NULL”?

Mengapa AVG mengabaikan NULL dan bagaimana hal itu mengubah jawaban yang diharapkan pewawancara. Kamu berlatih Coding Interview Prep 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 Coding Interview Prep?

Tidak diperlukan pengalaman sebelumnya. Coding Interview Prep 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 2 dari 4.

Berapa lama pelajaran “SUM dan AVG dengan NULL” 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 Coding Interview Prep ini?

Ya. Setiap pelajaran Coding Interview Prep 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(*) vs COUNT(kolom) vs COUNT(DISTINCT)
  2. SUM dan AVG dengan NULL
  3. MIN, MAX, dan Agregasi Non-Numerik
  4. Agregat Tanpa GROUP BY
← Kembali ke Coding Interview Prep