0Pricing
Coding Interview Prep · Pelajaran

COUNT(*) vs COUNT(kolom) vs COUNT(DISTINCT)

Pertanyaan klasik tentang cara setiap bentuk COUNT memperlakukan NULL dan duplikat.

COUNT(*) vs COUNT(kolom) vs COUNT(DISTINCT) adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 1 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.

Pertanyaan yang Akan Diajukan kepada Anda

Jika Anda mengikuti wawancara SQL, perkirakan pertanyaan ini muncul dalam sepuluh menit pertama: Apa perbedaan antara COUNT(*), COUNT(column), dan COUNT(DISTINCT column)?

Pertanyaan ini tampak sepele, tetapi pewawancara menggunakannya untuk memeriksa apakah Anda benar-benar memahami cara agregat menangani nilai NULL dan duplikat. Jawaban yang percaya diri dan tepat menunjukkan bahwa Anda telah menulis kueri nyata, bukan sekadar menghafalkan sintaks.

Dalam pelajaran ini, kita akan membangun model mental yang sangat kuat agar Anda dapat menjawab dengan segera dan menjelaskan alasannya.

COUNT(*) Menghitung Baris

COUNT(*) menghitung baris. Fungsi ini sama sekali tidak memeriksa nilai kolom, jadi NULL tidak relevan. Jika tabel memiliki 100 baris, COUNT(*) mengembalikan 100, tanpa pengecualian.

Tanda bintang di sini tidak digunakan untuk mengalikan atau memperluas kolom. Tanda ini adalah token khusus yang berarti "hitung setiap baris yang memenuhi syarat". Gunakan bentuk ini ketika pertanyaannya sederhana: "berapa banyak rekaman?"

SELECT COUNT(*) AS total_rows
FROM employees;

Data Contoh untuk Dianalisis

Mari gunakan satu tabel kecil sebagai dasar pembahasan. Bayangkan tabel employees dengan kolom department yang dapat berisi NULL:

  • Alice, Penjualan
  • Bob, Penjualan
  • Carol, NULL
  • Dan, Teknik
  • Eve, NULL

Totalnya adalah 5 baris. Tiga baris memiliki nilai departemen (Penjualan, Penjualan, Teknik), dan dua baris memiliki NULL. Ingat angka-angka ini; kita akan menghitung isi tabel ini dengan tiga cara berbeda.

COUNT(column) Melewati NULL

COUNT(column) hanya menghitung baris ketika kolom tersebut bukan NULL. Fungsi ini sepenuhnya mengabaikan nilai NULL.

Pada data contoh kita, COUNT(department) mengembalikan 3, bukan 5, karena dua nilai departemen adalah NULL. Inilah fakta terpenting dalam seluruh pelajaran: COUNT pada kolom tidak pernah menghitung NULL.

SELECT COUNT(department) AS depts_present
FROM employees;
-- returns 3 on our sample data

Membandingkan Keduanya Sejauh Ini

Jika dibandingkan pada tabel yang sama dengan 5 baris:

  • COUNT(*) = 5 (setiap baris)
  • COUNT(department) = 3 (departemen yang bukan NULL)

Selisihnya, 5 dikurangi 3, sama dengan jumlah departemen yang bernilai NULL. Trik wawancara yang praktis: COUNT(*) - COUNT(col) memberi Anda jumlah NULL dalam kolom tersebut tanpa menulis klausa WHERE terpisah.

SELECT COUNT(*) - COUNT(department) AS null_departments
FROM employees;
-- returns 2

COUNT(DISTINCT column)

COUNT(DISTINCT column) menghitung jumlah nilai unik yang bukan NULL. Fungsi ini terlebih dahulu menghapus duplikat, kemudian mengabaikan NULL, lalu menghitung nilai yang tersisa.

Pada data kita, nilai departemen yang berbeda adalah Penjualan dan Teknik, jadi COUNT(DISTINCT department) mengembalikan 2. Dua NULL tidak dihitung, dan duplikat Penjualan digabung menjadi satu.

SELECT COUNT(DISTINCT department) AS unique_depts
FROM employees;
-- returns 2

Ketiganya Sekaligus

Gambaran lengkap pada tabel dengan 5 baris:

  • COUNT(*) = 5 — baris
  • COUNT(department) = 3 — nilai yang bukan NULL
  • COUNT(DISTINCT department) = 2 — nilai unik yang bukan NULL

Jika Anda dapat menghafalkan urutan ini, yaitu memperhatikan NULL lalu duplikat, berarti Anda telah memahami seluruh konsepnya. Perhatikan bahwa setiap bentuk mengembalikan nilai yang kurang dari atau sama dengan bentuk di atasnya.

SELECT
  COUNT(*)                       AS rows_total,
  COUNT(department)              AS depts_present,
  COUNT(DISTINCT department)     AS unique_depts
FROM employees;

Variasi Wawancara dengan Contoh Lengkap

Pewawancara sering menyampaikannya dalam bentuk lain: "Berapa banyak karyawan yang ditugaskan ke suatu departemen, dan berapa banyak departemen berbeda yang ada?"

Bagian pertama menggunakan COUNT(department) (ditugaskan berarti bukan NULL). Bagian kedua menggunakan COUNT(DISTINCT department). Mengenali COUNT yang sesuai dengan setiap frasa adalah keterampilan yang sedang diuji.

SELECT
  COUNT(department)          AS assigned_employees,
  COUNT(DISTINCT department) AS distinct_departments
FROM employees;

COUNT dengan Kondisi

Pertanyaan lanjutan yang sering muncul: hitung hanya baris yang memenuhi suatu kondisi. Trik yang bersih dan dapat diterapkan di berbagai sistem adalah menggunakan COUNT pada ekspresi CASE. Karena COUNT(column) melewati NULL, buat CASE mengembalikan NULL untuk baris yang ingin dikecualikan.

Di sini kita menghitung karyawan Penjualan. CASE menghasilkan nilai hanya untuk baris Penjualan dan NULL untuk baris lainnya, sehingga COUNT hanya menghitung baris tersebut.

SELECT
  COUNT(CASE WHEN department = 'Sales' THEN 1 END) AS sales_count
FROM employees;
-- returns 2

Kesalahan Umum yang Harus Dihindari

Waspadai jebakan yang sengaja disisipkan pewawancara berikut:

  • Menganggap COUNT(column) sama dengan COUNT(*) — keduanya hanya sama jika kolom tersebut tidak memiliki NULL.
  • Mengira COUNT(DISTINCT col) menyertakan NULL sebagai satu nilai berbeda — padahal tidak.
  • Menulis COUNT(1) dengan harapan fungsi ini melewati NULL — perilakunya sama seperti COUNT(*), yaitu menghitung semua baris.

Sampaikan hal-hal ini secara proaktif dalam wawancara untuk menunjukkan pemahaman yang mendalam.

COUNT(1) dan COUNT(constant)

Kandidat sering bertanya mana yang lebih cepat, COUNT(*) atau COUNT(1). Jawabannya: keduanya identik secara semantik — sama-sama menghitung setiap baris tanpa memedulikan NULL — dan pengoptimal modern memperlakukannya dengan cara yang sama, jadi tidak ada perbedaan kinerja yang nyata.

Konstanta di dalam COUNT(1) tidak pernah bernilai NULL, sehingga tidak ada baris yang dilewati. Pilih COUNT(*) demi kejelasan; bentuk ini adalah bentuk yang lazim digunakan.

SELECT COUNT(*) AS a, COUNT(1) AS b
FROM employees;
-- a and b are always equal

Pemeriksaan Singkat

Uji model mental Anda pada tabel contoh.

Rangkuman

Sekarang Anda telah menguasai pertanyaan agregat yang paling sering diajukan:

  • COUNT(*) menghitung setiap baris, termasuk NULL.
  • COUNT(column) hanya menghitung nilai yang bukan NULL.
  • COUNT(DISTINCT column) menghitung nilai unik yang bukan NULL.
  • COUNT(*) - COUNT(col) memberikan jumlah NULL tanpa perhitungan tambahan.
  • COUNT(1) sama dengan COUNT(*) — tidak melewati NULL dan tidak memiliki perbedaan kecepatan.

Sampaikan dengan jelas dan sertakan alasannya. Selanjutnya: cara SUM dan AVG menangani NULL.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “COUNT(*) vs COUNT(kolom) vs COUNT(DISTINCT)” gratis?

Ya — teks lengkap “COUNT(*) vs COUNT(kolom) vs COUNT(DISTINCT)” 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 “COUNT(*) vs COUNT(kolom) vs COUNT(DISTINCT)”?

Pertanyaan klasik tentang cara setiap bentuk COUNT memperlakukan NULL dan duplikat. 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 1 dari 4.

Berapa lama pelajaran “COUNT(*) vs COUNT(kolom) vs COUNT(DISTINCT)” 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