SQL’de Gruplama ve Toplama İşlemleri

SQL, verileri analiz etmek ve özetlemek için güçlü araçlar sunar. Bu araçlardan en önemlileri GROUP BY ve HAVING ifadeleridir. Bu makalede, verilerin gruplandırılması ve gruplar üzerinde koşulların uygulanması konularına detaylı bir şekilde değineceğiz.
GROUP BY ile Veri Gruplama
GROUP BY, bir sorguda belirli sütunlara göre verileri gruplandırmak için kullanılır. Bu işlem genellikle toplama fonksiyonları (örneğin, SUM
, COUNT
, AVG
, MIN
, MAX
) ile birlikte kullanılır. GROUP BY, aynı değerlere sahip olan satırları bir araya getirerek bu gruplar üzerinde işlem yapmamıza olanak tanır.
Temel Kullanımı
GROUP BY ifadesinin genel sözdizimi şu şekildedir:
SELECT sütun1, toplama_fonksiyonu(sütun2)
FROM tablo_adi
GROUP BY sütun1;
Örnek
Bir “satislar” tablosunda her bir ürünün toplam satış miktarını bulmak için aşağıdaki sorguyu kullanabiliriz:
SELECT urun_adi, SUM(satis_miktari) AS toplam_satis
FROM satislar
GROUP BY urun_adi;
Bu sorgu:
urun_adi
sütunundaki benzersiz değerlere göre gruplama yapar.- Her grup için
satis_miktari
sütunundaki değerlerin toplamını hesaplar.
Birden Fazla Sütun ile Gruplama
Birden fazla sütun kullanarak gruplama yapmak da mümkündür. Örneğin, ürünler ve satış bölgelerine göre gruplama yapabiliriz:
SELECT urun_adi, bolge, SUM(satis_miktari) AS toplam_satis
FROM satislar
GROUP BY urun_adi, bolge;
Bu sorgu, her ürün ve bölge kombinasyonu için toplam satış miktarını hesaplar.
HAVING ile Gruplara Koşul Uygulama
HAVING, gruplar üzerinde koşullar uygulamak için kullanılır. WHERE
ifadesi, gruplama yapılmadan önce bireysel satırlara uygulanırken, HAVING
gruplama işleminden sonra gruplara uygulanır.
Temel Kullanımı
HAVING ifadesinin genel sözdizimi şu şekildedir:
SELECT sütun1, toplama_fonksiyonu(sütun2)
FROM tablo_adi
GROUP BY sütun1
HAVING toplama_fonksiyonu(sütun2) koşul;
Örnek
Toplam satış miktarı 1000’den büyük olan ürünleri listelemek için aşağıdaki sorguyu kullanabiliriz:
SELECT urun_adi, SUM(satis_miktari) AS toplam_satis
FROM satislar
GROUP BY urun_adi
HAVING SUM(satis_miktari) > 1000;
Bu sorgu:
urun_adi
sütununa göre gruplama yapar.- Her grup için toplam satış miktarını hesaplar.
- Sadece toplam satış miktarı 1000’den büyük olan grupları döndürür.
WHERE ve HAVING Arasındaki Fark
- WHERE: Gruplama öncesinde bireysel satırlara uygulanır.
- HAVING: Gruplama sonrasında gruplara uygulanır.
Örnek Karşılaştırma
Bir “satislar” tablosunda toplam satış miktarı 500’den büyük olan ve satış tarihi 2023 yılına ait olan ürünleri listelemek için hem WHERE
hem de HAVING
ifadelerini kullanabiliriz:
SELECT urun_adi, SUM(satis_miktari) AS toplam_satis
FROM satislar
WHERE YEAR(satis_tarihi) = 2023
GROUP BY urun_adi
HAVING SUM(satis_miktari) > 500;
Bu sorguda:
WHERE
ifadesi, 2023 yılına ait satışları seçer.GROUP BY
, ürün adına göre gruplama yapar.HAVING
, toplam satış miktarı 500’den büyük olan grupları döndürür.
GROUP BY ve HAVING ile İleri Seviye Kullanımlar
Gruplama Sonuçlarını Sıralama
Gruplama işlemlerinden sonra sonuçları sıralamak için ORDER BY
ifadesi kullanılabilir:
SELECT urun_adi, SUM(satis_miktari) AS toplam_satis
FROM satislar
GROUP BY urun_adi
HAVING SUM(satis_miktari) > 500
ORDER BY toplam_satis DESC;
Bu sorgu, toplam satış miktarı 500’den büyük olan ürünleri azalan sırayla listeler.
Aliases Kullanımı
HAVING
ifadesinde alias kullanımı desteklenmez. Ancak alias’ı tekrar tanımlayarak kullanılabilir:
SELECT urun_adi, SUM(satis_miktari) AS toplam_satis
FROM satislar
GROUP BY urun_adi
HAVING SUM(satis_miktari) > 1000;
Genel İpuçları
- TOPLAMA FONKSİYONLARININ ANLAŞILMASI: GROUP BY, genellikle toplama fonksiyonları ile birlikte çalışır. Bu yüzden
SUM
,AVG
,MIN
,MAX
veCOUNT
fonksiyonlarını anlamak önemlidir. - HAVING’İN DOĞRU YERDE KULLANILMASI: Sorgularda filtreleme yapmak istediğinizde, satırlar için
WHERE
, gruplar içinHAVING
kullanmayı unutmayın. - VERİLERİ GÖRSELLEŞTİRME: Karmaşık gruplama sonuçlarını anlamak için veri görselleştirme araçları kullanmayı düşünebilirsiniz.
SQL’de gruplama ve toplama işlemleri, büyük veri kümelerini anlamlandırmak için vazgeçilmezdir. GROUP BY
, verileri özetlemek için güçlü bir araçken, HAVING
ifadesi gruplar üzerinde ince ayar yapmanıza olanak tanır. Bu iki aracı doğru bir şekilde kullanarak karmaşık analizler yapabilir ve önemli bilgiler elde edebilirsiniz.