0Pricing
Coding Interview Prep · Ders

Tek Bir Tablo İçindeki Satırları Karşılaştırma

Çiftleri, yinelemeleri ve bitişik kayıtları bulmak için SELF JOIN örüntülerini öğrenin.

Tek Bir Tablo İçindeki Satırları Karşılaştırma, 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.

Satırdan Satıra Karşılaştırma için Kendi Kendine Birleştirmeler

Hiyerarşilerin yanı sıra, kendi kendine birleştirmenin diğer önemli kullanımı aynı tablonun satırlarını birbirleriyle karşılaştırmaktır. Üst öğe-alt öğe ilişkisi kurmak yerine, yinelenen, benzer veya bitişik kayıtları bulmak için rastgele satırları eşleştirirsiniz.

Örüntü aynıdır: tabloya iki kez takma ad verin ve eşleştirmek istediğiniz iki satır arasındaki ilişkiyi ifade eden bir ON koşulu yazınız.

Aynı Gruptaki Çiftleri Bulma

Klasik soru: aynı departmanda çalışan tüm çalışan çiftlerini bulunuz. Departmanların eşit olması koşuluyla tabloyu kendisiyle birleştiriniz, ancak iki satırı farklı tutunuz.

Saf birleştirme, her çalışanı kendisiyle de eşleştirir ve her çifti iki kez üretir. Bunu bir sonraki adımda düzelteceğiz.

SELECT a.name, b.name, a.department
FROM employees a
JOIN employees b ON a.department = b.department;

Kendi Kendine Eşleşenleri ve Ayna Kopyalarını Kaldırma

Aynı grupta eşleştirmede iki sorun vardır: bir satır kendisiyle eşleşir (Alice ile Alice) ve her çift iki kez görünür (Alice-Bob ve Bob-Alice).

Her ikisini de tek bir eşitsizlikle düzeltiniz: a.id < b.id. Bu, iki satırın farklı olmasını ve her çiftin yalnızca tek sıralamasının tutulmasını garanti eder.

SELECT a.name, b.name, a.department
FROM employees a
JOIN employees b
  ON a.department = b.department
 AND a.id < b.id;

Neden a.id < b.id, a.id <> b.id Değil

a.id <> b.id kullanmak kendi kendine eşleşenleri kaldırır, ancak her iki sıralamayı da döndürmeye devam ederek sonuçlarınızı iki katına çıkarır. a.id < b.id kullanmak ise kendi kendine eşleşenleri kaldırır ve aynadaki tekrarı tek seferde ortadan kaldırır.

Mülakat yapanlar özellikle < ile <> arasındaki seçime dikkat eder; bu, kendi kendine birleştirmelerin kombinatorik yapısını anladığınızı gösterir.

-- <>  keeps Alice-Bob AND Bob-Alice (duplicated)
-- <   keeps only Alice-Bob (correct unique pairs)

Yinelenen Satırları Bulma

Anahtar sütunlarda birbirinin kopyası olan kayıtları bulmak için bu sütunlarda kendi kendine birleştirme yapınız ve birincil anahtarların farklı olmasını zorunlu kılınız.

Burada aynı e-posta adresini paylaşan müşterileri ortaya çıkarıyoruz. a.id < b.id her yinelenen çifti bir kez tutar. Çoğu zaman GROUP BY ... HAVING COUNT(*) > 1 daha temizdir; ancak kendi kendine birleştirme, soruna neden olan gerçek çiftleri yan yana gösterir.

SELECT a.id, b.id, a.email
FROM customers a
JOIN customers b
  ON a.email = b.email
 AND a.id < b.id;

Bitişik Kayıtları Karşılaştırma

Analistlerin sık yaptığı bir iş, her satırı dizideki sonraki satırla karşılaştırmaktır; örneğin her günün satışlarını önceki günle karşılaştırmak. Kendi kendine birleştirme, ardışık satırları eşleştirebilir.

Burada farkı hesaplamak için her günü tam bir gün önceki satırla birleştiriyoruz. Bu, dizide boşluk olmadığında işe yarar.

SELECT t.day, t.amount,
       t.amount - y.amount AS change_vs_prev
FROM daily_sales t
JOIN daily_sales y
  ON y.day = t.day - INTERVAL '1 day';

Komşulukla Yapılan Kendi Kendine Birleştirmelerde Boşluk Sorunu

Önceki sorgu, bir gün eksik olduğunda bozulur: tam olarak bir gün önceye ait satır yoktur; bu nedenle ilgili satır ya sonuçtan çıkar (iç birleştirme) ya da NULL değerlerini ele almanız gerekir.

Mülakat yapanların 'önceki satırla karşılaştırma' için sizi sık sık pencere işlevleri gibi LAG kullanımına yöneltmesinin nedeni budur. Bu işlevler değer eşleşmesi yerine sıra konumunu kullanır ve boşlukları sorunsuz biçimde tolere eder.

-- LAG handles gaps; the self join assumed contiguous days
SELECT day, amount,
       amount - LAG(amount) OVER (ORDER BY day) AS change_vs_prev
FROM daily_sales;

Öz Birleştirme ile Pencere İşlevi Karşılaştırması

Ödünleşimi bilin:

  • Bir öz birleştirme, satırları değer ilişkisine göre karşılaştırır (aynı departman, önceki tarih). Esnektir; ancak satırları çoğaltabilir ve boşlukları yanlış ele alabilir.
  • Bir pencere işlevi, sıralanmış bir bölüm içindeki sıra konumuna göre karşılaştırma yapar. Önceki/sonraki satır mantığı için daha temizdir.

'Komşu satırla karşılaştırma' için LAG/LEAD kullanmayı tercih edin. 'Bir koşulla eşleşen tüm çiftleri bulma' içinse öz birleştirme doğal araçtır.

Kendi Eşleriyle Karşılaştırıldığında Daha İyi Olan Satırları Bulma

Başka bir örüntü: departmanındaki en az bir iş arkadaşından daha fazla kazanan çalışanları bulmak. Öz birleştirme bunu doğrudan ifade eder.

Her çalışanı, aynı departmanda daha az kazanan diğer çalışanlarla birleştirir, ardından görünen tekil çalışanları seçeriz. Bu, neredeyse İngilizce cümleyi okur gibi anlaşılır.

SELECT DISTINCT a.name, a.department, a.salary
FROM employees a
JOIN employees b
  ON a.department = b.department
 AND a.salary > b.salary;

Satır Çoğalmasına Dikkat Edin

Tekil olmayan bir sütun üzerinden yapılan öz birleştirmeler satırları çoğaltır. 100 kişilik bir departman içindeki eşleştirme, filtreleme öncesinde yaklaşık 100 x 100 aday çift üretir.

Her zaman tekilleştirme koşulunu (a.id < b.id) ekleyin; yalnızca her çifti değil, eşleşmeye katılan satırları istiyorsanız DISTINCT veya gruplama kullanın. Mülakatlarda bu satır çoğalması farkındalığından bahsedin.

Karşılaştırma Aracını Seçme

Tablo içi karşılaştırma için karar kılavuzu:

  • Tüm eşleşen çiftler (yinelenenler, aynı gruptaki kombinasyonlar): a.id < b.id koşuluyla öz birleştirme.
  • Bir sıradaki önceki/sonraki satır: pencere işlevi (LAG/LEAD).
  • Her satırı bir grup toplulaştırmasıyla karşılaştırma: ilişkili alt sorgu veya pencere toplulaştırması.

Hızlı Kontrol

Aynı kategoriyi paylaşan, her biri benzersiz olan ürün çiftlerinin tamamını istiyorsunuz; hiçbir ürün kendisiyle eşleşmemeli ve çiftlerin sıralaması yinelenmemelidir.

Özet: Tek Bir Tablo İçindeki Satırları Karşılaştırma

Temel çıkarımlar:

  • Yinelenenleri bulmak ve aynı gruptaki kombinasyonları oluşturmak için tabloyu kendi satırlarıyla eşleştirmek üzere öz birleştirme kullanın.
  • Tek bir koşulla hem kendisiyle eşleşen çiftleri hem de ayna niteliğindeki yinelenenleri kaldırmak için a.id < b.id kullanın.
  • Öz birleştirmeyle komşuluk karşılaştırmaları boşluklarda bozulur; önceki/sonraki satır mantığı için LAG/LEAD kullanmayı tercih edin.
  • Tekil olmayan sütunlarla birleştirme yaparken satır çoğalmasını her zaman hesaba katın.

Sıkça Sorulan Sorular

“Tek Bir Tablo İçindeki Satırları Karşılaştırma” dersi ücretsiz mi?

Evet — “Tek Bir Tablo İçindeki Satırları Karşılaştırma” 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.

“Tek Bir Tablo İçindeki Satırları Karşılaştırma” dersinde ne öğreneceğim?

Çiftleri, yinelemeleri ve bitişik kayıtları bulmak için SELF JOIN örüntülerini öğ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.

“Tek Bir Tablo İçindeki Satırları Karşılaştırma” 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. CROSS JOIN ve Kartezyen Çarpımlar
  2. Hiyerarşiler için SELF JOIN
  3. Tek Bir Tablo İçindeki Satırları Karşılaştırma
  4. Doğru Birleştirme Türünü Seçme
← Coding Interview Prep Sayfasına Dön