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

Mülakat soruları 1: klasikler

N. en yüksek maaş, tekrar eden kayıtlar, yöneticiden fazla kazananlar ve daha fazlası.

Uygulamada aç, 7 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ç.

Veri pozisyonu mülakatlarının değişmezleri

Bu sorular veri analisti, veri bilimci ve veri mühendisi mülakatlarında neredeyse her zaman karşına çıkar. Önce kendin çöz, takılırsan ipucuna bak. Her birinin birden çok doğru çözümü vardır; sonucun doğruysa kabul edilir.

Mülakatta düşünceni anlatÖnce veriyi ve grain düzeyini sor (ör. “eşit maaşlar nasıl sayılsın?”), sonra kenar durumları (NULL, eşitlik, boş grup) belirt. Görüşmeci doğru cevap kadar yaklaşımını da değerlendirir.

Derinleş: klasik soruların tuzakları

Mülakatçı “ikinci en yüksek maaş” sorusunda aslında şunu ölçer: Eşitlikleri, NULL'ları ve boş sonucu düşünüyor musun? Aynı sorunun üç yaygın çözümü eşitlik olduğunda üç farklı cevap verir. Lezzet Kurye restoranlarının komisyon oranlarında 5 restoran %22, 6 restoran %20, 6 restoran %18:

WITH r AS (
  SELECT commission_pct,
         ROW_NUMBER() OVER (ORDER BY commission_pct DESC, restaurant_id) AS rn,
         RANK()       OVER (ORDER BY commission_pct DESC) AS rk,
         DENSE_RANK() OVER (ORDER BY commission_pct DESC) AS dr
  FROM lk_restaurants
)
SELECT (SELECT commission_pct FROM r WHERE rn = 3)      AS row_number_3,
       (SELECT MIN(commission_pct) FROM r WHERE rk = 3) AS rank_3,
       (SELECT MIN(commission_pct) FROM r WHERE dr = 3) AS dense_rank_3;

“3. en yüksek farklı oran” 18'dir ve yalnızca DENSE_RANK bunu verir. ROW_NUMBER yine 22 döndürür (3. satır), RANK ise NULL (sıralar 1, 6, 12 diye atladığı için 3 yok). Soruyu netleştirmek (“farklı değer mi, satır mı?”) puan kazandırır.

Sık çıkan kalıplar

SoruKalıpKenar durum
N. en yüksek değerDENSE_RANK veya DISTINCT ... OFFSET N-1Eşitlik, N'den az farklı değer
Ardışık günler (gaps & islands)tarih − ROW_NUMBER() sabit kalan gruplarAynı gün birden çok kayıt: önce DISTINCT
Yöneticisinden fazla kazananKendine JOINYöneticisi olmayan (NULL) kişi
Grup başına ilk NROW_NUMBER / RANK + filtreEşitlikte kaç satır istendiği
Yıldan yıla büyümeLAGÖnceki dönem 0 veya yok

Gaps & islands nasıl çalışır?

Bir müşterinin sipariş verdiği günleri sırala ve her güne sıra numarası ver. Ardışık günlerde hem tarih hem sıra birer artar, yani gün − sıra farkı sabit kalır; bu sabit, “ada” kimliğidir. Lezzet Kurye'de 19 müşteri en az 3 gün üst üste sipariş vermiş:

WITH g AS (
  SELECT DISTINCT customer_id, date(placed_at) AS gun FROM lk_orders
),
a AS (
  SELECT customer_id, gun,
         julianday(gun) - julianday('2024-01-01')
           - ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY gun) AS ada
  FROM g
),
s AS (
  SELECT customer_id, ada, COUNT(*) AS seri FROM a GROUP BY customer_id, ada
)
SELECT COUNT(DISTINCT customer_id) AS musteri, MAX(seri) AS en_uzun_seri
FROM s WHERE seri >= 3;
Mülakatta sırayla1) Tanecik ve tanımları sor. 2) Küçük bir örnek üzerinde beklenen sonucu söyle. 3) Önce okunaklı bir CTE çözümü yaz. 4) Kenar durumları (NULL, eşitlik, boş grup) say. 5) Büyük veride performansı (indeks, pencere fonksiyonu maliyeti) konuş.
Alıştırmalara geç (7)