🔴 Window Fonksiyonları

Window Fonksiyonları: GROUP BY'ı bir sınıf fotoğrafını yakıp yerine tek bir 'sınıf ortalaması' kâğıdı asmak gibi düşün: özet elinde kalır, öğrenciler kaybolur.

GROUP BY'ı bir sınıf fotoğrafını yakıp yerine tek bir 'sınıf ortalaması' kâğıdı asmak gibi düşün: özet elinde kalır, öğrenciler kaybolur. Window fonksiyonu ise fotoğrafı olduğu gibi bırakır ve her öğrencinin göğsüne küçük bir etiket iliştirir: 'sınıf ortalaması 62, sen 78, sınıfta 3. sıradasın'. Satırlar durur, bağlam eklenir. Peki neden GROUP BY tek başına yetmiyor — ortalamayı bir kez hesaplayıp sonuçları elde birleştirmek varken neden yeni bir kavram öğreniyoruz? Çünkü 'her testin kendi environment ortalamasına göre nerede durduğu' sorusunda satır ile özet AYNI çıktıda yan yana durmak zorundadır. GROUP BY ile bunu istediğinde tabloyu kendisiyle tekrar JOIN'lemen gerekir; sorgu iki katına çıkar, JOIN koşulunu kaçırdığında da sonuç sessizce çoğalır. Java'da bunun karşılığı iki geçiştir: önce `Collectors.groupingBy(..., averagingInt(...))` ile bir Map çıkarırsın, sonra listeyi tekrar dolaşıp her elemanı o Map'teki değerle karşılaştırırsın. `OVER (PARTITION BY environment)` tam olarak bu iki geçişi tek ifadede yapar — ara Map yoktur, ikinci döngü yoktur. QA'de bu, flaky test avının temel aracıdır: `ROW_NUMBER() OVER (PARTITION BY test_name ORDER BY run_date DESC)` ile her testin SON koşumunu ayıklarsın; `AVG(duration_ms) OVER (PARTITION BY environment)` ile 'staging'de normal ama prod'da ortalamanın iki katı süren' testleri yakalarsın. Bu ikincisi çoğu zaman testin değil, ortamın bozuk olduğunun ilk kanıtıdır.

Window (Pencere) Fonksiyonları

Window fonksiyonları, GROUP BY'ın aksine satırları daraltmadan ilgili satırlar üzerinde hesaplamalar yapar. Her satır kendi sonucunu korurken komşu satırlar hakkında da bilgi alır.

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?