Gerçek Dünya Raporlama Kalıpları
Pencere işlevleriyle elde tutma eğrileri, kategori başına en iyi N öğe ve oturumlaştırma gibi klasik panoları uygulayın.
Gerçek Dünya Raporlama Kalıpları, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 4. 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, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
Kalıp: Grup Başına İlk N
Kullanıcı başına en iyi 3 sipariş:
WITH ranked AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY total DESC) AS rn
FROM orders
)
SELECT * FROM ranked WHERE rn <= 3;Kalıp: Birikimli Toplamlar
Zaman içindeki birikimli gelir:
SELECT day, revenue,
SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue;Kalıp: İlk Gerçekleşme
Her kullanıcının her eylemi ilk gerçekleştirdiği zaman:
SELECT user_id, action, MIN(ts) AS first_at
FROM events
GROUP BY user_id, action;
-- Or with window functions for full row:
WITH firsts AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id, action ORDER BY ts) AS rn
FROM events
)
SELECT * FROM firsts WHERE rn = 1;Kalıp: Kohort Tutma
Kullanıcıları kayıt oldukları haftaya göre gruplayın, N. haftaya göre tutma oranını hesaplayın:
WITH cohorts AS (
SELECT id AS user_id, date_trunc('week', created_at) AS cohort_week
FROM users
),
activities AS (
SELECT user_id, date_trunc('week', ts) AS active_week FROM events
)
SELECT c.cohort_week,
(a.active_week - c.cohort_week) / 7 AS week_offset,
COUNT(DISTINCT a.user_id) AS active
FROM cohorts c
JOIN activities a USING (user_id)
WHERE a.active_week >= c.cohort_week
GROUP BY c.cohort_week, week_offset
ORDER BY c.cohort_week, week_offset;Kalıp: Dönüşüm Hunisi Analizi
Her adıma kaç kullanıcının ulaştığı:
SELECT
COUNT(*) AS signed_up,
COUNT(*) FILTER (WHERE first_login_at IS NOT NULL) AS logged_in,
COUNT(*) FILTER (WHERE first_purchase_at IS NOT NULL) AS purchased
FROM users;Kalıp: Oturumlara Ayırma
Aralık 30 dakikadan uzunsa olayları oturumlar hâlinde gruplayın:
WITH gaps AS (
SELECT user_id, ts,
CASE
WHEN ts - LAG(ts) OVER (PARTITION BY user_id ORDER BY ts)
> INTERVAL '30 min'
THEN 1 ELSE 0
END AS new_session
FROM events
)
SELECT user_id, ts,
SUM(new_session) OVER (PARTITION BY user_id ORDER BY ts) AS session_id
FROM gaps;Kalıp: Dönemden Döneme
Geçerli ayı önceki ayla karşılaştırın:
SELECT month, revenue,
LAG(revenue) OVER (ORDER BY month) AS prev_month,
revenue - LAG(revenue) OVER (ORDER BY month) AS delta,
(revenue::FLOAT / NULLIF(LAG(revenue) OVER (ORDER BY month), 0) - 1) * 100 AS pct_change
FROM monthly_revenue
ORDER BY month;Kalıp: Döndürülmüş Çıktı
FILTER ile geniş biçimli çıktı:
SELECT user_id,
SUM(amount) FILTER (WHERE month = '2024-01') AS jan,
SUM(amount) FILTER (WHERE month = '2024-02') AS feb,
SUM(amount) FILTER (WHERE month = '2024-03') AS mar
FROM monthly_spend
GROUP BY user_id;Kalıp: Bugünün Etkin Kullanıcıları
DAU / WAU / MAU:
SELECT
COUNT(DISTINCT user_id) FILTER (WHERE ts >= NOW() - INTERVAL '1 day') AS dau,
COUNT(DISTINCT user_id) FILTER (WHERE ts >= NOW() - INTERVAL '7 days') AS wau,
COUNT(DISTINCT user_id) FILTER (WHERE ts >= NOW() - INTERVAL '30 days') AS mau
FROM events;Kalıp: Boşlukları Doldurma
Olay bulunmayan günler eksik görünmek yerine 0 göstermelidir:
SELECT day, COALESCE(COUNT(e.id), 0) AS events
FROM generate_series(CURRENT_DATE - 30, CURRENT_DATE, INTERVAL '1 day') AS day
LEFT JOIN events e ON date_trunc('day', e.ts) = day
GROUP BY day
ORDER BY day;İçgörü için Pencere İşlevlerini Birleştirme
Tek bir sorguda birden çok pencereli sütun — okunabilir ve hızlı:
SELECT day, revenue,
LAG(revenue) OVER w AS prev,
AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS avg_7d,
SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
WINDOW w AS (ORDER BY day)
ORDER BY day;Özet
Raporların çoğu birkaç kalıptan oluşur: ilk N, birikimli toplamlar, kohortlar, huniler, oturumlara ayırma, dönemden döneme karşılaştırmalar, döndürmeler ve boşluk doldurma. Bunlarda ustalaştığınızda, SQL'in gerektirdiği her gösterge tablosunu oluşturabilirsiniz.
Hızlı Kontrol
"Kategori başına en iyi 5 ürün" raporu oluşturuyorsunuz. Hangi deyimsel SQL kalıbını kullanırsınız?
Sıkça Sorulan Sorular
“Gerçek Dünya Raporlama Kalıpları” dersi ücretsiz mi?
Evet — “Gerçek Dünya Raporlama Kalıpları” 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 SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“Gerçek Dünya Raporlama Kalıpları” dersinde ne öğreneceğim?
Pencere işlevleriyle elde tutma eğrileri, kategori başına en iyi N öğe ve oturumlaştırma gibi klasik panoları uygulayın. SQL Academy 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.
SQL Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, 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 4. dersidir.
“Gerçek Dünya Raporlama Kalıpları” 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 SQL Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy 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
- Çerçeve Maddeleri: ROWS ve RANGE
- Çerçeve Pencereleriyle LAG/LEAD
- NTILE ve Cume_Dist ile Kovalara Ayırma
- Gerçek Dünya Raporlama Kalıpları