0Pricing
SQL Interview Prep · Ders

COUNT(*) ile COUNT(sütun) ve COUNT(DISTINCT) Karşılaştırması

Her COUNT biçiminin NULL değerleri ve yinelemeleri nasıl ele aldığını öğrenin.

COUNT(*) ile COUNT(sütun) ve COUNT(DISTINCT) Karşılaştırması, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.

Size Sorulacak Soru

Bir SQL mülakatına girerseniz, ilk on dakika içinde şunu bekleyiniz: COUNT(*), COUNT(column) ve COUNT(DISTINCT column) arasındaki fark nedir?

Bu soru önemsiz gibi görünür; ancak mülakatçılar bunu, toplama işlevlerinin NULL değerlerini ve yinelenenleri nasıl ele aldığını gerçekten anlayıp anlamadığınızı kontrol etmek için kullanır. Kendinden emin ve kesin bir yanıt, yalnızca sözdizimini ezberlemediğinizi, gerçek sorgular yazdığınızı gösterir.

Bu derste, anında yanıt verebilmeniz ve bunun nedenini açıklayabilmeniz için son derece sağlam bir zihinsel model oluşturacağız.

COUNT(*) Satırları Sayar

COUNT(*), satırları sayar. Herhangi bir sütun değerine hiç bakmaz; dolayısıyla NULL değerleri önemsizdir. Tabloda 100 satır varsa COUNT(*) kesinlikle 100 döndürür.

Buradaki yıldız işareti çarpma veya sütunları genişletme anlamına gelmez. "Uygun olan her satırı say" anlamına gelen özel bir belirteçtir. Soru yalnızca "kaç kayıt var?" olduğunda başvuracağınız biçim budur.

SELECT COUNT(*) AS total_rows
FROM employees;

Üzerinde Akıl Yürüteceğiniz Örnek Veriler

Her şeyi tek bir küçük tabloya dayandıralım. department sütununun NULL alabildiği bir employees tablosu düşününüz:

  • Alice, Satış
  • Bob, Satış
  • Carol, NULL
  • Dan, Mühendislik
  • Eve, NULL

Toplamda 5 satır vardır. Üç satırda bir departman değeri (Satış, Satış, Mühendislik), iki satırda ise NULL bulunur. Bu sayıları aklınızda tutunuz; bu tabloyu üç farklı şekilde sayacağız.

COUNT(column) NULL Değerlerini Atlar

COUNT(column), yalnızca o sütunun NULL olmayan bir değere sahip olduğu satırları sayar. NULL değerlerini tamamen yok sayar.

Örnek verilerimizde COUNT(department) sonucu 5 değil, 3 olur; çünkü iki departman değeri NULL'dur. Bu, dersin tamamındaki en önemli bilgidir: Bir sütunun COUNT işlemi NULL değerlerini asla saymaz.

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

Şimdiye Kadarki İkisini Karşılaştırma

Aynı 5 satırlık tabloda yan yana:

  • COUNT(*) = 5 (tüm satırlar)
  • COUNT(department) = 3 (NULL olmayan departmanlar)

Aralarındaki fark olan 5 eksi 3, NULL departmanların sayısına eşittir. Mülakatlarda işe yarayan bir yöntem: COUNT(*) - COUNT(col), ayrı bir WHERE yan tümcesi yazmadan o sütundaki NULL değerlerinin sayısını verir.

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

COUNT(DISTINCT column)

COUNT(DISTINCT column), benzersiz NULL olmayan değerlerin sayısını hesaplar. Önce yinelenenleri kaldırır, ardından NULL değerlerini yok sayar ve kalanları sayar.

Verilerimizdeki farklı departman değerleri Satış ve Mühendislik olduğundan COUNT(DISTINCT department) sonucu 2 olur. İki NULL sayılmaz ve yinelenen Satış tek değere indirgenir.

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

Üçünün Birlikte Kullanımı

5 satırlık tablomuzdaki tam görünüm:

  • COUNT(*) = 5 — satırlar
  • COUNT(department) = 3 — NULL olmayan değerler
  • COUNT(DISTINCT department) = 2 — benzersiz NULL olmayan değerler

Önce NULL'ları, ardından yinelenenleri dikkate alan bu sıralamayı söyleyebiliyorsanız kavramın tamamını öğrenmişsiniz demektir. Her biçimin, kendisinden üsttekinin değerinden küçük veya ona eşit bir değer döndürdüğüne dikkat ediniz.

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

Çözümlü Bir Mülakat Örneği

Mülakatçılar soruyu genellikle şöyle süsler: "Bir departmana atanmış kaç çalışan var ve kaç farklı departman bulunuyor?"

İlk bölüm COUNT(department) işlemidir (atanmış olmak NULL olmayan anlamına gelir). İkinci bölüm ise COUNT(DISTINCT department) işlemidir. Her ifadenin hangi COUNT biçimine karşılık geldiğini fark etmek, tam olarak sınanan beceridir.

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

Koşullu COUNT

Sık sorulan bir devam sorusu şudur: bir koşulu karşılayan yalnızca satırları saymak. Temiz ve taşınabilir bir yöntem, bir CASE ifadesi üzerinde COUNT kullanmaktır. COUNT(column) NULL değerlerini atladığından, hariç tutmak istediğiniz satırlar için CASE'in NULL döndürmesini sağlayınız.

Burada Satış çalışanlarını sayıyoruz. CASE yalnızca Satış satırları için bir değer üretir ve diğerlerinde NULL döndürür; böylece COUNT yalnızca onları sayar.

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

Kaçınılması Gereken Yaygın Hatalar

Mülakatçıların kurduğu şu tuzaklara dikkat ediniz:

  • COUNT(column) ifadesinin COUNT(*) ifadesine eşit olduğunu varsaymak — bu yalnızca sütunda hiç NULL olmadığında geçerlidir.
  • COUNT(DISTINCT col) ifadesinin NULL değerini tek bir benzersiz değer olarak içerdiğini düşünmek — içermez.
  • NULL değerlerini atlamasını bekleyerek COUNT(1) yazmak — COUNT(*) gibi davranır ve tüm satırları sayar.

Derinlik sahibi olduğunuzu göstermek için bunları mülakatta kendiliğinizden belirtiniz.

COUNT(1) ve COUNT(constant)

Adaylar genellikle COUNT(*) ile COUNT(1) ifadelerinden hangisinin daha hızlı olduğunu sorar. Yanıt şudur: İkisi de anlamsal olarak özdeştir — NULL değerlerinden bağımsız olarak her satırı sayarlar — ve modern sorgu iyileştiricileri bunlara aynı şekilde davranır. Dolayısıyla gerçek bir performans farkı yoktur.

COUNT(1) içindeki sabit hiçbir zaman NULL değildir; bu nedenle hiçbir satır atlanmaz. Anlaşılırlık için COUNT(*) kullanmayı tercih ediniz; bu, yerleşik kullanımdır.

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

Hızlı Kontrol

Zihinsel modelinizi örnek tablo üzerinde sınayınız.

Özet

En sık sorulan toplama sorusuna artık hâkimsiniz:

  • COUNT(*), NULL değerler dahil her satırı sayar.
  • COUNT(column), yalnızca NULL olmayan değerleri sayar.
  • COUNT(DISTINCT column), benzersiz NULL olmayan değerleri sayar.
  • COUNT(*) - COUNT(col), ayrıca bir işlem yapmadan NULL değerlerinin sayısını verir.
  • COUNT(1), COUNT(*) ifadesine eşittir — NULL atlama yoktur, hız farkı yoktur.

Bunu net bir şekilde söyleyiniz ve nedenini açıklayınız. Sırada SUM ve AVG'nin NULL değerlerini nasıl ele aldığı var.

Sıkça Sorulan Sorular

“COUNT(*) ile COUNT(sütun) ve COUNT(DISTINCT) Karşılaştırması” dersi ücretsiz mi?

Evet — “COUNT(*) ile COUNT(sütun) ve COUNT(DISTINCT) Karşılaştırması” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.

“COUNT(*) ile COUNT(sütun) ve COUNT(DISTINCT) Karşılaştırması” dersinde ne öğreneceğim?

Her COUNT biçiminin NULL değerleri ve yinelemeleri nasıl ele aldığını öğrenin. SQL Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“COUNT(*) ile COUNT(sütun) ve COUNT(DISTINCT) Karşılaştırması” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. COUNT(*) ile COUNT(sütun) ve COUNT(DISTINCT) Karşılaştırması
  2. NULL Değerlerle SUM ve AVG
  3. MIN, MAX ve Sayısal Olmayan Toplulaştırma
  4. GROUP BY Olmadan Toplulaştırma
← SQL Interview Prep Sayfasına Dön