Final rapor
- SQL kursu
- İleri seviye
- Ders 23/81
- 5 dk
Recursive CTE ile hiyerarşi raporu yaz
Final rapor
Final raporda recursive CTE ile trend analizi yapabilirsin. Tarih dizisini üretip olayları eşlersin.
WITH RECURSIVE days(d) AS (
SELECT DATE '2026-01-01'
UNION ALL
SELECT d + 1 FROM days WHERE d < DATE '2026-01-31'
)
SELECT d, COUNT(e.id) AS events
FROM days d
LEFT JOIN events e ON e.event_date = d.d
GROUP BY d
ORDER BY d;Bu sorgu her gün için olay sayısını verir.
WITH RECURSIVE ile days adında kendine başvuran geçici bir sonuç kümesi (CTE) tanımlanır; ardından gelen sorgu onu bir tablo gibi kullanır. days d kaynağından d, COUNT(e.id) AS events seçilir. events e tablosu e.event_date = d.d koşuluyla sol tablonun tüm satırları korunarak birleştirilir. Satırlar d değerine göre gruplanır; toplam fonksiyonları her grup için ayrı hesaplanır. Sonuç d değerine göre küçükten büyüğe sıralanır.
Final rapor — ayrıntı
Recursive CTE tarih dizisi üretir. LEFT JOIN ile olay olmayan günler de 0 olarak gelir.
Olay olmayan günler grafikte boşluk değil sıfır olarak görünür; COALESCE(count, 0) NULL sayıları 0'a çevirir.
Uygulama Final rapor
Recursive CTE ile Ocak ayının tüm günlerini üret ve günlük olay sayısını hesapla.
Başlangıç kodu
-- final rapor
WITH RECURSIVEÖrnek çözüm
WITH RECURSIVE days(d) AS (
SELECT DATE '2026-01-01'
UNION ALL
SELECT d + 1 FROM days WHERE d < DATE '2026-01-31'
)
SELECT d, COUNT(e.id) AS events
FROM days d
LEFT JOIN events e ON e.event_date = d.d
GROUP BY d
ORDER BY d;Beklenen çıktı
d events 2026-01-01 15 2026-01-02 20
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 RECURSIVE ekle
WITH ____ days(d) AS (
SELECT DATE '2026-01-01'
UNION ALL
SELECT d + 1 FROM days WHERE d < DATE '2026-01-31'
)
SELECT d, COUNT(e.id) FROM days d LEFT JOIN events e ON e.event_date = d.d GROUP BY d;
WITH RECURSIVE days(d) AS (
SELECT DATE '2026-01-01'
UNION ALL
SELECT d + 1 FROM days WHERE d < DATE '2026-01-31'
)
SELECT d, COUNT(e.id) FROM days d LEFT JOIN events e ON e.event_date = d.d GROUP BY d;
Açıklama: RECURSIVE doğru cevap.
2 Final rapor: kavramları eşleştir
| Kavram | Anlamı |
|---|---|
recursive CTE |
tarih dizisi |
LEFT JOIN |
tüm günler |
trend |
eğilim |
0 boş gün |
olay yok |
3 Recursive CTE burada ne üretir?
- İsim dizisi
- Sayı dizisi
- Tarih dizisi Doğru cevap
- Rastgele
Açıklama: Recursive CTE tarih dizisi üretir.