İleri seviye vaka soruları
Kıdemli analist ve veri bilimci mülakatlarında pencere fonksiyonları ve CTE ile çözülen çok adımlı sorular gelir. Her soruda önce adımları kâğıda yaz: “Önce müşteri bazında topla, sonra sırala, sonra filtrele” gibi.
Kontrol sorusuSonucun satır sayısı beklediğin gibi mi? Her müşteri için bir satır bekliyorsan
COUNT(DISTINCT customer_id) ile karşılaştır.Çözüm şablonu: dört adım
- Tanecik: Sonuçta bir satır neyi temsil edecek? (müşteri, ay, müşteri × ay)
- Ara tablo: O taneciğe indiren CTE'yi yaz ve tek başına çalıştırıp satır sayısını kontrol et.
- Pencere veya birleştirme: Karşılaştırma (önceki ay, ilk sipariş, sıra) gerekiyorsa pencere fonksiyonu ya da self join ekle.
- Son filtre ve biçim: WHERE, yuvarlama, sıralama ve sütun adları en sonda.
Bu derste geçen kalıplar
| Soru tipi | Kalıp | Tuzak |
|---|---|---|
| Kümülatif toplam | SUM(x) OVER (ORDER BY tarih ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) | Aynı tarihte birden çok satır varsa varsayılan RANGE çerçevesi eşit satırları birlikte toplar; ROWS yaz ve sıralamaya benzersiz bir sütun ekle. |
| Aydan aya değişim | Aylık CTE + LAG(n) OVER (ORDER BY ay) | Sipariş olmayan ay atlanırsa LAG bir önceki dolu aya bakar. Gerekirse takvim tablosuyla boşlukları doldur. |
| Ardışık dönemler | Dönem numarası − ROW_NUMBER() = grup anahtarı | Aynı ay iki kez sayılmasın diye önce DISTINCT ile müşteri × ay tekilleştir. |
| Elde tutma | İlk sipariş CTE'si + sonraki dönemle eşleştirme | Payda “ilk siparişi o dönemde olanlar”dır, tüm müşteriler değil. |
| Ortalama sepet | Önce sipariş düzeyinde topla, sonra ortalama al | Satır düzeyinde AVG almak çok kalemli siparişleri fazla ağırlıklandırır. |
Örnek: satır ortalaması ile sipariş ortalaması farkı
WITH s AS (
SELECT order_id, SUM(quantity) AS adet
FROM order_items
GROUP BY order_id
)
SELECT ROUND(AVG(adet), 2) AS siparis_basina_adet,
(SELECT ROUND(AVG(quantity), 2) FROM order_items) AS satir_basina_adet
FROM s;
İki sayı farklıdır; mülakatta “ortalama sepet büyüklüğü” sorulduğunda beklenen birincisidir. Hangisini hesapladığını sesli söylemek, görüşmecinin en çok dikkat ettiği şeylerden biridir.
Sınır durumları sorSorgu yazmadan önce sor: iptal edilen siparişler dahil mi? Aynı gün iki sipariş varsa ne olur? Sipariş olmayan ay 0 mı görünmeli, hiç mi görünmemeli? Bu sorular çözümün kendisi kadar puan getirir.