Persediaan Temu Duga SQL · Pelajaran

COUNT(*) berbanding COUNT(lajur) berbanding COUNT(DISTINCT)

Soalan klasik tentang cara setiap bentuk COUNT mengendalikan NULL dan pendua

Pelajaran 1 daripada 413 langkah

COUNT(*) berbanding COUNT(lajur) berbanding COUNT(DISTINCT) ialah pelajaran Persediaan Temu Duga SQL percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Persediaan Temu Duga SQL, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga SQL merangkumi sejumlah 4 pelajaran.

Soalan yang Akan Ditanyakan

Jika anda menghadiri temu duga SQL, jangkakan soalan ini dalam sepuluh minit pertama: Apakah perbezaan antara COUNT(*), COUNT(column) dan COUNT(DISTINCT column)?

Soalan ini kelihatan remeh, tetapi penemuduga menggunakannya untuk menyemak sama ada anda benar-benar memahami cara agregat mengendalikan nilai NULL dan pendua. Jawapan yang yakin dan tepat menunjukkan bahawa anda telah menulis pertanyaan sebenar, bukan sekadar menghafal sintaks.

Dalam pelajaran ini, kita akan membina model mental yang kukuh supaya anda boleh menjawab dengan segera dan menerangkan sebabnya.

COUNT(*) Mengira Baris

COUNT(*) mengira baris. Ia langsung tidak memeriksa nilai mana-mana lajur, jadi NULL tidak relevan. Jika jadual mempunyai 100 baris, COUNT(*) mengembalikan 100, tanpa syarat.

Tanda bintang itu tidak digunakan untuk mendarab atau mengembangkan lajur di sini. Ia ialah simbol khas yang bermaksud "kira setiap baris yang memenuhi syarat." Inilah bentuk yang anda pilih apabila soalannya hanya "berapa banyak rekod?"

SELECT COUNT(*) AS total_rows
FROM employees;

Data Contoh untuk Dianalisis

Mari kita gunakan satu jadual kecil sebagai asas. Bayangkan jadual employees dengan lajur department yang boleh mengandungi NULL:

  • Alice, Jualan
  • Bob, Jualan
  • Carol, NULL
  • Dan, Kejuruteraan
  • Eve, NULL

Jumlah keseluruhannya ialah 5 baris. Tiga baris mempunyai nilai jabatan (Jualan, Jualan, Kejuruteraan) dan dua baris mempunyai NULL. Ingat nombor ini; kita akan mengira jadual ini dengan tiga cara berbeza.

COUNT(lajur) Melangkau NULL

COUNT(column) hanya mengira baris yang lajurnya bukan NULL. Ia mengabaikan nilai NULL sepenuhnya.

Dengan data contoh kita, COUNT(department) mengembalikan 3, bukannya 5, kerana dua nilai jabatan ialah NULL. Inilah fakta paling penting dalam keseluruhan pelajaran: COUNT bagi sesuatu lajur tidak pernah mengira NULL.

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

Perbandingan Setakat Ini

Jika dibandingkan pada jadual 5 baris yang sama:

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

Perbezaan antara kedua-duanya, 5 tolak 3, sama dengan bilangan jabatan yang bernilai NULL. Helah temu duga yang berguna: COUNT(*) - COUNT(col) memberi anda bilangan NULL dalam lajur itu tanpa menulis klausa WHERE berasingan.

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

COUNT(DISTINCT lajur)

COUNT(DISTINCT column) mengira bilangan nilai unik yang bukan NULL. Ia mula-mula membuang pendua, kemudian mengabaikan NULL, dan akhirnya mengira nilai yang tinggal.

Dalam data kita, nilai jabatan unik ialah Jualan dan Kejuruteraan, jadi COUNT(DISTINCT department) mengembalikan 2. Dua NULL tidak dikira, manakala pendua Jualan digabungkan menjadi satu.

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

Ketiga-tiganya Bersama

Gambaran penuh pada jadual 5 baris kita:

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

Jika anda boleh menyebut urutan ini, mengambil kira NULL dahulu kemudian pendua, anda sudah menguasai keseluruhan konsep. Perhatikan bahawa setiap bentuk mengembalikan nilai yang kurang daripada atau sama dengan bentuk di atasnya.

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

Contoh Soalan Temu Duga

Penemuduga sering menyamarkan soalan ini: "Berapakah bilangan pekerja yang ditugaskan kepada jabatan, dan berapakah bilangan jabatan unik yang wujud?"

Bahagian pertama ialah COUNT(department) (ditugaskan bermaksud bukan NULL). Bahagian kedua ialah COUNT(DISTINCT department). Mengenal pasti COUNT yang sepadan dengan setiap frasa itulah kemahiran yang sedang diuji.

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

COUNT dengan Syarat

Soalan susulan yang sering ditanya: kira hanya baris yang memenuhi syarat. Teknik yang kemas dan serasi merentas sistem ialah menggunakan COUNT terhadap ungkapan CASE. Oleh sebab COUNT(column) melangkau NULL, jadikan CASE mengembalikan NULL untuk baris yang ingin dikecualikan.

Di sini kita mengira pekerja Jualan. CASE menghasilkan nilai hanya untuk baris Jualan dan NULL bagi baris lain, jadi COUNT hanya mengira baris tersebut.

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

Kesilapan Lazim yang Perlu Dielakkan

Berwaspada terhadap perangkap yang sengaja diletakkan oleh penemuduga:

  • Menganggap COUNT(column) sama dengan COUNT(*) — ia hanya sama apabila lajur itu tidak mempunyai sebarang NULL.
  • Menyangka COUNT(DISTINCT col) memasukkan NULL sebagai satu nilai unik — sebenarnya tidak.
  • Menulis COUNT(1) dengan menjangkakan ia melangkau NULL — ia berfungsi seperti COUNT(*), iaitu mengira semua baris.

Nyatakan perkara ini secara proaktif dalam temu duga untuk menunjukkan kefahaman yang mendalam.

COUNT(1) dan COUNT(pemalar)

Calon sering bertanya yang mana lebih pantas, COUNT(*) atau COUNT(1). Jawapannya: kedua-duanya sama dari segi semantik — kedua-duanya mengira setiap baris tanpa mengira NULL — dan pengoptimum moden menganggapnya sama, jadi tiada perbezaan prestasi yang sebenar.

Pemalar dalam COUNT(1) tidak pernah NULL, jadi tiada baris yang akan dilangkau. Utamakan COUNT(*) demi kejelasan; itulah bentuk yang lazim digunakan.

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

Semakan Pantas

Uji model mental anda pada jadual contoh.

Imbas Kembali

Kini anda benar-benar menguasai soalan agregat yang paling kerap ditanya:

  • COUNT(*) mengira setiap baris, termasuk NULL.
  • COUNT(column) hanya mengira nilai bukan NULL.
  • COUNT(DISTINCT column) mengira nilai unik yang bukan NULL.
  • COUNT(*) - COUNT(col) memberikan bilangan NULL tanpa pengiraan tambahan.
  • COUNT(1) sama dengan COUNT(*) — tiada NULL yang dilangkau dan tiada perbezaan kelajuan.

Nyatakannya dengan jelas dan sokong dengan sebabnya. Seterusnya: cara SUM dan AVG mengendalikan NULL.

Percuma untuk bermula

Pelajari SQL dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “COUNT(*) berbanding COUNT(lajur) berbanding COUNT(DISTINCT)” percuma?

Ya — teks penuh “COUNT(*) berbanding COUNT(lajur) berbanding COUNT(DISTINCT)” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Persediaan Temu Duga SQL, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga SQL merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “COUNT(*) berbanding COUNT(lajur) berbanding COUNT(DISTINCT)”?

Soalan klasik tentang cara setiap bentuk COUNT mengendalikan NULL dan pendua Anda berlatih Persediaan Temu Duga SQL menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Persediaan Temu Duga SQL?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga SQL di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “COUNT(*) berbanding COUNT(lajur) berbanding COUNT(DISTINCT)” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Persediaan Temu Duga SQL ini?

Ya. Setiap pelajaran Persediaan Temu Duga SQL menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. COUNT(*) berbanding COUNT(lajur) berbanding COUNT(DISTINCT)
  2. SUM dan AVG dengan NULL
  3. MIN, MAX dan Agregasi Bukan Angka
  4. Agregat Tanpa GROUP BY
← Kembali ke Persediaan Temu Duga SQL