Ana içeriğe geç
Kesit SQL
Orta · Mülakat Hazırlığı

Mülakat kalıbı: kendine birleştirme klasikleri

Yöneticisinden fazla kazananlar, karşılıklı ilişkiler, birlikte satın alınan ürün çiftleri ve aynı gün iki olay.

Uygulamada aç, 4 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Soru

Görüşmeci“Yöneticisinden fazla kazanan çalışanları bul.” Takip: “En sık birlikte satın alınan ürün çiftleri hangileri?”

Önce netleştir

Kod yazmadan önce sorulacak sorular. Her biri farklı bir sorguya götürür; sormamak en sık puan kaybıdır.

Yaklaşım

  1. Tabloyu iki takma adla birleştir; her takma ad bir rolü temsil eder (çalışan, yönetici).
  2. Çiftlerde tekrarı önlemek için a.id < b.id koşulu ekle.
  3. Önce sipariş × ürün düzeyinde tekilleştir, sonra çiftleri üret ve say.

Çözüm 1: yöneticiden fazla kazananlar

SELECT e.first_name AS calisan, e.salary, m.first_name AS yonetici, m.salary AS yonetici_maas
FROM employees e
JOIN employees m ON m.emp_id = e.manager_id
WHERE e.salary > m.salary
ORDER BY e.salary DESC;

Çözüm 2: birlikte satın alınan ürün çiftleri

WITH s AS (
  SELECT DISTINCT order_id, product_id FROM order_items
)
SELECT a.product_id AS urun_a, b.product_id AS urun_b, COUNT(*) AS birlikte
FROM s a
JOIN s b ON b.order_id = a.order_id AND a.product_id < b.product_id
GROUP BY a.product_id, b.product_id
ORDER BY birlikte DESC, urun_a, urun_b
LIMIT 5;

İkisi de aynı fikir: bir tabloyu iki farklı rolde kullanmak. Anadolu Market'te birinci sorgu boş döner, çünkü kimse yöneticisinden fazla kazanmıyor; boş sonuç da geçerli bir cevaptır, bunu görüşmeciye söyleyip sorgunun doğru çalıştığını >= ya da oranla gösterebilirsin. İkinci sorguda a.product_id < b.product_id hem bir ürünün kendisiyle eşleşmesini hem de (A, B) / (B, A) çift sayımını önler. Ürün sayısı büyüdükçe çift sayısı karesel büyür; büyük veride önce popüler ürünlerle sınırlamak gerekir.

Sınır durumları

DurumNe olur?
Yöneticisi olmayanINNER JOIN onu düşürür; istenirse LEFT JOIN
Eşit maaş> yerine >= kullanılırsa sonuç değişir; soruyu netleştir
Aynı ürün iki satırdaDISTINCT olmazsa çift sayısı şişer
Kendisiyle eşleşmea.id < b.id ya da a.id <> b.id koşulu gerekir

Takip soruları

Görüşmeci neye bakıyor?Rolleri doğru adlandırman (e ve m), çift tekrarını kendiliğinden önlemen ve satır patlaması riskini fark etmen.
Alıştırmalara geç (4)