🟡 Alt Sorgular

Alt Sorgular: Subquery'yi bir soruşturma zinciri gibi düşün: 'Ortalamadan yavaş testler hangileri?' diye sormadan önce birinin 'ortalama kaç?' sorusunu cevaplamış olması gerekir.

Subquery'yi bir soruşturma zinciri gibi düşün: 'Ortalamadan yavaş testler hangileri?' diye sormadan önce birinin 'ortalama kaç?' sorusunu cevaplamış olması gerekir. İç sorgu bu ilk cevabı üretir, dış sorgu onun üzerine karar verir. Peki neden bu iki adımı tek bir WHERE koşuluna sıkıştıramıyoruz — `WHERE duration_ms > AVG(duration_ms)` neden çalışmaz? Çünkü WHERE satırları TEK TEK süzerken tablonun tamamının ortalaması henüz hesaplanmamıştır; ortalama bütünü görmeyi ister, WHERE ise parçayı. Subquery tam olarak bu sıra problemini çözer. Java'da bunu iki ayrı satırda çözersin: önce `double avg = list.stream().mapToInt(T::getDuration).average().orElse(0)`, sonra `list.stream().filter(t -> t.duration > avg)`. Aradaki fark şu: Java'da ara sonucu tutan bir **değişken** vardır, SQL'de yoktur — iç sorgu o değişkenin yerini tutar ve her çalıştırmada yeniden hesaplanır. QA tarafında bunun karşılığı somut: gece koşan regression suite'inin 400 satırlık raporunu Excel'e taşıyıp elle ortalama almak yerine, pipeline tek sorguyla 'ortalamayı yukarı çeken testler' listesini üretir. Yavaş test = flaky test adayıdır; timeout sınırına yaklaşan testler bir sonraki release'de rastgele kırılmaya başlar.

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?

Alt Sorgular (Subqueries)

Bir SQL sorgusunun içine yazılmış başka bir sorguya alt sorgu (subquery) denir. İki ana türü vardır: - **Basit Alt Sorgu (Subquery)**: Dış sorgudan bağımsızdır. Önce alt sorgu **bir kez** çalışır, sonucu dış sorguya iletir (örn: ortalama süreden uzun süren testleri bulma). - **Bağlantılı Alt Sorgu (Correlated Subquery)**: Dış sorgudaki satırların değerlerine bağımlıdır. Dış sorgunun **her bir satırı için tekrar tekrar çalışır**. Bu yüzden büyük tablolarda performans sorunu yaratabilir. - **EXISTS Operatörü**: Alt sorgunun herhangi bir satır döndürüp döndürmediğini kontrol etmek için kullanılır (en az 1 eşleşme bulduğunda çalışmayı durdurur, performanslıdır).