🟡 GROUP BY & HAVING
GROUP BY & HAVING: GROUP BY, büyük bir çamaşırhaneyi düşün: yüzlerce gömlek farklı sahiplerinden gelmiş, sen önce her müşterinin gömleklerini kendi yığınına koyuyorsun (GROUP BY
GROUP BY, büyük bir çamaşırhaneyi düşün: yüzlerce gömlek farklı sahiplerinden gelmiş, sen önce her müşterinin gömleklerini kendi yığınına koyuyorsun (GROUP BY customer_id), sonra her yığını sayıyorsun (COUNT), ardından 5'ten fazla gömlekli müşterileri öne alıyorsun (HAVING COUNT > 5). WHERE bu sürecin neresine giriyor? HAVING'den önce — yırtık olanları gelmeden önce zaten çıkarıyorsun (WHERE condition). Java'da `list.stream().collect(Collectors.groupingBy(t -> t.environment, Collectors.counting()))` yazıp sonucu ayrıca filtrelersin; SQL'de GROUP BY + HAVING tek sorguda ikisini birden yapar. Fark kritiktir: WHERE gruplama yapılmadan önce çalışır ve aggregate sonuçlara erişemez; HAVING ise gruplandıktan sonra çalışır ve COUNT/SUM/AVG üzerinde filtre kurar. QA mühendisi için bu sırayı yanlış anlamak 'HAVING yerine WHERE kullandım, sıfır sonuç döndü' hatasına yol açar — ve sorgu herhangi bir hata mesajı vermeden yanlış sıfır sonuç döndürdüğünde, sessiz yanlış PASS riski en yüksek noktasına ulaşır.
GROUP BY, aynı değere sahip satırları gruplar. HAVING ise bu grupları filtreler — WHERE gibi ama aggregate sonuçları için. COUNT/SUM gibi fonksiyonları WHERE içinde kullanamazsınız; bunun için HAVING kullanın.
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?
Veri Gruplama ve HAVING Filtresi