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ı

  1. FROM / JOIN
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY
  7. LIMIT

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.

  1. INNER JOIN ile LEFT JOIN arasındaki fark nedir?KolayVeritabanı & SQLBackend
  2. Bir tablodaki ikinci en yüksek maaşı bulun.OrtaVeritabanı & SQLBackend
  3. Index nedir? Dezavantajları nelerdir?OrtaVeritabanı & SQLBackend
  4. ACID nedir?OrtaVeritabanı & SQLBackend
  5. Normalizasyon nedir? Ne zaman denormalizasyon yaparsınız?ZorVeritabanı & SQLBackend
  6. N+1 sorgu problemi nedir ve nasıl çözülür?OrtaVeritabanı & SQLBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle