0Pricing
Coding Interview Prep · Ders

Benzersizlik için DISTINCT ve GROUP BY Karşılaştırması

DISTINCT'in ne zaman doğru yanıt olduğunu ve mülakatçının ne zaman GROUP BY beklediğini öğrenin.

Benzersizlik için DISTINCT ve GROUP BY Karşılaştırması, CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 3. 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, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.

DISTINCT Ne Yapar

DISTINCT yinelenen satırları kaldırır. Mülakat yapanların özellikle kontrol ettiği nokta şudur: DISTINCT tek bir sütuna değil, seçilen satırın tamamına uygulanır; bu nedenle SELECT DISTINCT a, b, (a, b) çiftindeki yinelenenleri kaldırır.

SELECT DISTINCT department
FROM employees;

DISTINCT Seçilen Tüm Sütunları Kapsar

Birden çok sütun olduğunda DISTINCT, her benzersiz birleşimi korur; örneğin her benzersiz (department, job_title) çifti için bir satır bırakır. Yalnızca tek bir sütundaki yinelenenleri kaldırmanın standart bir yolu yoktur.

SELECT DISTINCT department, job_title
FROM employees;

GROUP BY Ne Yapar

GROUP BY, aynı anahtarı paylaşan satırları her grup için tek satır olacak şekilde birleştirir. Tek başına bir sütuna göre gruplama yapmak, o sütun üzerinde DISTINCT kullanmakla aynı sonucu verir.

SELECT department
FROM employees
GROUP BY department;
-- equivalent to:
SELECT DISTINCT department
FROM employees;

Gerçek Fark: Toplama

Peki ne zaman farklılaşırlar? Bir toplama işlemi gerektiğinde. GROUP BY her grup için COUNT, SUM veya AVG hesaplayabilir; DISTINCT bunu yapamaz. Benzersiz satırlara mı ihtiyacınız var? DISTINCT kullanın. Grup başına bir ölçüye mi ihtiyacınız var? GROUP BY kullanın.

SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department;

DISTINCT Grup Başına Sayım Yapamaz

DISTINCT'e sonradan sayım ekleyemezsiniz. “Departman başına kaç çalışan var?” sorusunun doğru aracı her zaman COUNT(*) ile birlikte kullanılan GROUP BY'dır; SELECT DISTINCT değildir.

-- WRONG intent: this errors or returns one total row
-- SELECT DISTINCT department, COUNT(*) FROM employees;

-- RIGHT:
SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department;

COUNT(DISTINCT) İki Fikri Birleştirir

Sık kullanılan bir birleşim: COUNT(DISTINCT col), her grup içindeki benzersiz değerleri sayar. Burada DISTINCT toplama işlevinin içinde yer alır ve “departman başına kaç farklı unvan var?” sorusunu yanıtlar.

SELECT department,
       COUNT(DISTINCT job_title) AS distinct_titles
FROM employees
GROUP BY department;

Benzersiz Değerleri Genel Olarak Sayma

GROUP BY olmadan COUNT(DISTINCT col), tüm tablo genelindeki benzersiz değerleri sayar; “kaç farklı departmanımız var?” sorusuna doğrudan yanıt verir.

SELECT COUNT(DISTINCT department) AS n_departments
FROM employees;

-- equivalently, count the deduped subquery
SELECT COUNT(*)
FROM (SELECT DISTINCT department FROM employees) d;

Performans Çoğu Zaman Aynıdır

DISTINCT mi, GROUP BY mı daha hızlıdır? Yalnızca yinelenenleri kaldırma işleminde genellikle eşdeğerdir; iyileştiriciler ikisi için de benzer planlar oluşturur. Amacınıza göre seçim yapın: Benzersiz satırlar için DISTINCT, toplama yaparken GROUP BY.

DISTINCT ve NULL

DISTINCT NULL değerlerine nasıl davranır? Tüm NULL değerlerini eşit kabul eder; bu nedenle çok sayıda NULL satırı tek satırda birleşir. GROUP BY de aynı şekilde davranır; NULL değerleri tek bir grup oluşturur.

-- If manager_id has several NULLs, this returns one NULL row
SELECT DISTINCT manager_id
FROM employees;

PostgreSQL DISTINCT ON (Ek Bilgi)

Ek bilgi: PostgreSQL'de, ORDER BY verildiğinde anahtar başına ilk satırı koruyan standart dışı bir DISTINCT ON (expr) yapısı bulunur. Taşınabilir kod bunun yerine ROW_NUMBER() kullanır.

-- Postgres only: latest order per customer
SELECT DISTINCT ON (customer_id) customer_id, order_id, order_date
FROM orders
ORDER BY customer_id, order_date DESC;

DISTINCT Tek Bir Sütuna Değil, SELECT'in Tamamına Uygulanır

Bir tuzak daha: DISTINCT satırın tamamına uygulanır; bu nedenle SELECT DISTINCT customer_id, order_date, müşteri başına tek satır vermez. Bunun için MAX ile GROUP BY veya bir pencere işlevi kullanın.

-- Does NOT give one row per customer
SELECT DISTINCT customer_id, order_date FROM orders;

-- One row per customer: latest order date
SELECT customer_id, MAX(order_date) AS last_order
FROM orders
GROUP BY customer_id;

Hızlı Kontrol

Doğru aracı seçin.

Özet

Özet: DISTINCT satırların tamamındaki yinelenenleri kaldırır; GROUP BY anahtara göre satırları birleştirir ve toplama işlemlerini mümkün kılar. COUNT(DISTINCT col) benzersiz değerleri sayar, her ikisi de NULL değerlerini tek değer olarak ele alır ve performansları genellikle aynıdır.

Sıkça Sorulan Sorular

“Benzersizlik için DISTINCT ve GROUP BY Karşılaştırması” dersi ücretsiz mi?

Evet — “Benzersizlik için DISTINCT ve GROUP BY 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 Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.

“Benzersizlik için DISTINCT ve GROUP BY Karşılaştırması” dersinde ne öğreneceğim?

DISTINCT'in ne zaman doğru yanıt olduğunu ve mülakatçının ne zaman GROUP BY beklediğini öğrenin. Coding 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.

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

Önceden deneyim gerekmez. CoddyKit'te Coding 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 3. dersidir.

“Benzersizlik için DISTINCT ve GROUP BY 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 Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Coding 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. Sütunları Seçme ve Takma Ad Tuzakları
  2. Hesaplanan Sütunlar ve İfade Önceliği
  3. Benzersizlik için DISTINCT ve GROUP BY Karşılaştırması
  4. SELECT içinde CASE İfadeleri
← Coding Interview Prep Sayfasına Dön