Ana içeriğe geç
Kesit SQL
Temel · Özetleme

HAVING: grupları filtrelemek

WHERE satırları, HAVING grupları süzer.

Uygulamada aç, 10 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

WHERE ile HAVING farkı

-- 5'ten fazla ürünü olan kategoriler
SELECT category, COUNT(*) AS urun_sayisi
FROM products
GROUP BY category
HAVING COUNT(*) > 5;

İkisini birlikte kullanmak çok yaygındır:

-- Teslim edilmiş siparişlerde, 10'dan fazla siparişi olan müşteriler
SELECT customer_id, COUNT(*) AS siparis
FROM orders
WHERE status = 'delivered'
GROUP BY customer_id
HAVING COUNT(*) > 10
ORDER BY siparis DESC;
PerformansSatır düzeyinde süzebileceğin her koşulu WHERE'e koy. HAVING'e sadece toplama sonucuna bağlı koşullar kalsın. Böylece veritabanı daha az satırı gruplar.

Derinleş: WHERE mi HAVING mi?

Karar kuralı basit: koşul tek bir satıra bakarak değerlendirilebiliyorsa WHERE, bir grubun özetine bakmayı gerektiriyorsa HAVING.

KoşulYer
Durumu teslim olan siparişlerWHERE
100'den fazla siparişi olan restoranlarHAVING
Ortalama bahşişi 10 TL'yi aşan kuryelerHAVING
Aralık siparişleriWHERE
SELECT courier_id, COUNT(*) AS siparis, ROUND(AVG(tip), 2) AS ort_bahsis
FROM lk_orders
WHERE status = 'teslim'
GROUP BY courier_id
HAVING AVG(tip) > 8
ORDER BY ort_bahsis DESC;
Alıştırmalara geç (10)