SQL’de GROUP BY ve HAVING ifadeleri, verileri gruplandırarak özet bilgiler elde etmek için kullanılır. GROUP BY belirli sütunlara göre gruplama yaparken, HAVING ise gruplandırılmış verilere filtre uygulamak için kullanılır.
1. GROUP BY Kullanımı
📌 GROUP BY komutu, belirli bir sütuna göre verileri gruplandırarak toplu işlemler yapmamızı sağlar. Genellikle SUM(), COUNT(), AVG(), MIN(), MAX() gibi grup fonksiyonları ile birlikte kullanılır.
Örnek Senaryo:
Bir mağazanın satışlarını içeren siparişler adlı bir tablo olduğunu düşünelim:
📌 siparişler tablosu
sipariş_id | müşteri_id | ürün | miktar | fiyat |
---|---|---|---|---|
1 | 101 | Laptop | 2 | 20000 |
2 | 102 | Telefon | 3 | 8000 |
3 | 101 | Tablet | 1 | 5000 |
4 | 103 | Telefon | 2 | 8000 |
5 | 102 | Laptop | 1 | 20000 |
Bu tablodan her müşterinin toplam kaç sipariş verdiğini bulmak için GROUP BY kullanabiliriz:
SELECT müşteri_id, COUNT(sipariş_id) AS toplam_sipariş
FROM siparişler
GROUP BY müşteri_id;
✅ Sonuç:
müşteri_id | toplam_sipariş |
---|---|
101 | 2 |
102 | 2 |
103 | 1 |
📌 GROUP BY sayesinde her müşterinin kaç sipariş verdiğini gruplandırarak saydık.
2. GROUP BY ile SUM Kullanımı
📌 Her müşterinin yaptığı toplam harcamayı bulmak için SUM() fonksiyonunu kullanabiliriz.
SELECT müşteri_id, SUM(fiyat * miktar) AS toplam_harcama
FROM siparişler
GROUP BY müşteri_id;
✅ Sonuç:
müşteri_id | toplam_harcama |
---|---|
101 | 45000 |
102 | 44000 |
103 | 16000 |
📌 SUM() ile her müşterinin toplam harcamasını hesapladık.
3. HAVING Kullanımı
📌 HAVING, GROUP BY ile kullanılan verilere filtre uygulamak için kullanılır. WHERE koşulu gruplandırmadan önce kullanılırken, HAVING gruplandırmadan sonra kullanılır.
Örnek:
Her müşterinin toplam harcamasını hesapladık, ancak sadece 40.000 TL’den fazla harcayan müşterileri görmek istiyoruz.
SELECT müşteri_id, SUM(fiyat * miktar) AS toplam_harcama
FROM siparişler
GROUP BY müşteri_id
HAVING toplam_harcama > 40000;
✅ Sonuç:
müşteri_id | toplam_harcama |
---|---|
101 | 45000 |
102 | 44000 |
📌 HAVING kullanarak yalnızca toplam harcaması 40.000 TL üzerinde olan müşterileri listeledik.
4. GROUP BY ve HAVING ile COUNT Kullanımı
📌 Bir müşterinin kaç farklı sipariş verdiğini ve sadece 2 veya daha fazla sipariş verenleri bulalım.
SELECT müşteri_id, COUNT(sipariş_id) AS toplam_sipariş
FROM siparişler
GROUP BY müşteri_id
HAVING toplam_sipariş >= 2;
✅ Sonuç:
müşteri_id | toplam_sipariş |
---|---|
101 | 2 |
102 | 2 |
📌 HAVING kullanarak yalnızca 2 veya daha fazla sipariş veren müşterileri listeledik.
GROUP BY ve HAVING Kullanımı Özet
Komut | Ne İşe Yarar? |
---|---|
GROUP BY | Verileri belirli bir sütuna göre gruplandırır. |
HAVING | Gruplandırılmış verileri filtrelemek için kullanılır. |
✅ En önemli fark:
- WHERE → Gruplandırmadan önce filtreleme yapar.
- HAVING → Gruplandırmadan sonra filtreleme yapar.