COUNT(*) berbanding COUNT(lajur) berbanding COUNT(DISTINCT)
Soalan klasik tentang cara setiap bentuk COUNT mengendalikan NULL dan pendua
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 dataPerbandingan 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 2COUNT(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 2Ketiga-tiganya Bersama
Gambaran penuh pada jadual 5 baris kita:
COUNT(*)= 5 — barisCOUNT(department)= 3 — nilai bukan NULLCOUNT(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 2Kesilapan Lazim yang Perlu Dielakkan
Berwaspada terhadap perangkap yang sengaja diletakkan oleh penemuduga:
- Menganggap
COUNT(column)sama denganCOUNT(*)— 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 sepertiCOUNT(*), 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 equalSemakan 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 denganCOUNT(*)— tiada NULL yang dilangkau dan tiada perbezaan kelajuan.
Nyatakannya dengan jelas dan sokong dengan sebabnya. Seterusnya: cara SUM dan AVG mengendalikan NULL.
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
- COUNT(*) berbanding COUNT(lajur) berbanding COUNT(DISTINCT)
- SUM dan AVG dengan NULL
- MIN, MAX dan Agregasi Bukan Angka
- Agregat Tanpa GROUP BY