CodeBlanks Logo Icon CodeBlanks

Final rapor

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

query.sql
-- final rapor
WITH RECURSIVE

Örnek çözüm

query.sql
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

Soru
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;
Cevap
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.

İleri seviye bölümündeki tüm dersler