🔴 CTEs

CTEs: CTE'yi bir yemek tarifindeki 'ön hazırlık' bölümü gibi düşün. Kötü yazılmış tarif tek cümledir: 'soğanı doğrayıp kavurduğun karışıma, ayrı bir kapta ezdiğin domatesi ekleye

CTE'yi bir yemek tarifindeki 'ön hazırlık' bölümü gibi düşün. Kötü yazılmış tarif tek cümledir: 'soğanı doğrayıp kavurduğun karışıma, ayrı bir kapta ezdiğin domatesi ekleyerek elde ettiğin sosu makarnaya dök.' İyi tarif ise adımlara böler: 1) sos hazırla, 2) makarnayı haşla, 3) birleştir. `WITH yavas_testler AS (...)` tam olarak o numaralı adımdır — ara sonuca **isim** verir. Peki bu sadece kozmetik bir düzenleme mi; iç içe subquery ile aynı sonucu üretiyorsa neden zahmet edelim? İki gerçek fark var. Birincisi okuma yönü: iç içe subquery **içeriden dışarıya** okunur, insan beyni ise yukarıdan aşağıya okur — üç seviye iç içe geçmiş bir sorguda hangi parantezin kimin olduğunu 6 ay sonra sen bile çıkaramazsın. İkincisi tekrar kullanım: aynı ara sonuca sorgunun iki ayrı yerinde ihtiyaç duyduğunda subquery'yi kopyalayıp yapıştırman gerekir, CTE'yi ise adıyla iki kez çağırırsın. Kopyalanan sorgu, birini güncelleyip diğerini unutunca sessizce yanlış rapor üreten türden bir borçtur. Java'daki karşılığı doğrudan: uzun bir zinciri `var slowTests = ...; var baseline = ...; return compare(slowTests, baseline);` diye ara değişkenlere bölmek. CTE, SQL'in `local variable`'ıdır — ama Java'nın aksine tek bir ifadenin ömrü kadar yaşar, bir sonraki sorguda yoktur. QA raporlamasında bu, 'geçen haftaya göre yavaşlayan testler' gibi çok adımlı soruların tek okunabilir sorguya sığması demektir: CTE1 bu haftanın ortalamaları, CTE2 geçen haftanınki, ana sorgu farkı alır. Bu sorgu bir kez yazılıp nightly pipeline'a konduğunda, performans regresyonunu kimse fark etmeden önce yakalar.

CTE — Common Table Expressions (Ortak Tablo İfadeleri)

Micro Lab: SQL — GROUP BY / CTE / Window

TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.

Adim Adim: SQL — GROUP BY / CTE / Window

Aggregation mi Window mi?

Aggregation (ozetleme) mi Window (satir bazli hesap) mi? Onu belirle

Aggregation icin GROUP BY ile ozetlenecek sutunu sec

HAVING ile gruplara kosul uygula — WHERE gibi ama agregasyon sonrasinda

WITH cte_adi AS (...) SELECT ... FROM cte_adi ile sorguyu modülerlestir

OVER(PARTITION BY) ekle

Window icin SUM(col) OVER (PARTITION BY bolum ORDER BY siralama) kullan

SQL GROUP BY ve Window Function sorgusu yazma sirasi nedir?

CTE (Common Table Expressions) Yapısı