WHERE ile HAVING arasındaki fark nedir? GROUP BY ile nasıl kullanılır?
Cevap
WHERE: satırları gruplamadan önce filtreler. Aggregate fonksiyon (COUNT,SUM) kullanamaz.HAVING: gruplamadan sonra, oluşan grupları filtreler. Aggregate sonuçlarına koşul koyar.
-- 2025 yılında 5'ten fazla sipariş veren ve toplam harcaması 1000'i aşan müşteriler
SELECT musteri_id,
COUNT(*) AS siparis_sayisi,
SUM(tutar) AS toplam
FROM siparisler
WHERE tarih >= '2025-01-01' AND tarih < '2026-01-01' -- satır filtresi
GROUP BY musteri_id
HAVING COUNT(*) > 5 AND SUM(tutar) > 1000 -- grup filtresi
ORDER BY toplam DESC;Mantıksal çalışma sırası
FROM/JOINWHEREGROUP BYHAVINGSELECTORDER BYLIMIT
Bu sıra şunu açıklar: SELECT'te verilen takma ad (toplam) çoğu veritabanında WHERE içinde kullanılamaz, ama ORDER BY içinde kullanılabilir.
GROUP BY kuralı
SELECT listesindeki her sütun ya GROUP BY'da yer almalı ya da bir aggregate fonksiyon içinde olmalıdır. (PostgreSQL, gruplanan sütun primary key ise aynı tablodaki diğer sütunlara izin verir.)
Performans ipucu: bir koşul gruplamadan önce uygulanabiliyorsa WHERE'e yazın; daha az satır gruplanır.
İlgili Veritabanı & SQL soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.