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

Mülakat kalıbı: oranlar, paydalar ve dönüşüm

Doğru paydayı seçmek, tam sayı bölmesi, oranların ortalaması tuzağı ve koşullu sayım.

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ç.

Soru

Görüşmeci“Her cihaz için ziyaretçilerin yüzde kaçı satın almış?” Takip: “Peki A/B testinde B varyantı A'ya göre ne kadar iyi?”

Ö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. Payda kümesini tanımla (ziyaret eden kullanıcılar).
  2. Pay kümesini aynı grain düzeyinde tanımla (satın alan kullanıcılar).
  3. Koşullu sayımla ikisini tek geçişte hesapla.
  4. 100.0 ile çarparak tam sayı bölmesinden kaç.

Çözüm 1: koşullu COUNT DISTINCT

SELECT device,
       COUNT(DISTINCT CASE WHEN event_type = 'visit' THEN user_id END) AS ziyaretci,
       COUNT(DISTINCT CASE WHEN event_type = 'purchase' THEN user_id END) AS alici,
       ROUND(100.0 * COUNT(DISTINCT CASE WHEN event_type = 'purchase' THEN user_id END)
             / COUNT(DISTINCT CASE WHEN event_type = 'visit' THEN user_id END), 2) AS donusum
FROM web_events
GROUP BY device;

Çözüm 2: kullanıcı düzeyinde bayraklar

WITH k AS (
  SELECT device, user_id,
         MAX(CASE WHEN event_type = 'visit' THEN 1 ELSE 0 END) AS ziyaret,
         MAX(CASE WHEN event_type = 'purchase' THEN 1 ELSE 0 END) AS aldi
  FROM web_events
  GROUP BY device, user_id
)
SELECT device, SUM(ziyaret) AS ziyaretci, SUM(aldi) AS alici,
       ROUND(100.0 * SUM(CASE WHEN ziyaret = 1 AND aldi = 1 THEN 1 ELSE 0 END) / SUM(ziyaret), 2) AS donusum
FROM k
GROUP BY device;

İkinci çözüm önce kullanıcı düzeyine iner; “ziyaret edip satın alan” gibi birleşik koşullar ve huni adımları için daha esnektir. Birinci çözüm daha kısadır ama payda ile payın aynı kişiler olduğunu garanti etmez (ziyareti olmayan bir alıcı paya girer).

Sınır durumları

DurumNe olur?
Tam sayı bölmesi7 / 10 = 0 (SQL Server, PostgreSQL, SQLite). 100.0 * ile başla
Payda sıfırNULLIF(payda, 0) ile sıfıra bölmeyi önle
Oranların ortalamasıGünlük oranların ortalaması, toplam dönüşüm / toplam ziyaret ile aynı değildir
Çift sayımAynı kullanıcının birden çok satın alması: COUNT(DISTINCT user_id)

Takip soruları

Görüşmeci neye bakıyor?Paydayı netleştirmen, tam sayı bölmesini kendiliğinden önlemen ve “oranların ortalaması” tuzağını bilmen.
Alıştırmalara geç (7)