Merhaba! Bugün veri dünyasının olmazsa olmazlarından, böyle her yerde karşımıza çıkan o sihirli kelimelerden bahsedeceğiz: COUNT, SUM, AVG, MIN, MAX. Hani bazen bir tabloya bakarsın da ‘Acaba kaç tane kayıt var?’ ya da ‘Toplam ne kadar para dönmüş bu işlerde?’ diye merak edersin ya, işte bu fonksiyonlar tam da bunun için var. Sanki elinde bir sürü veri yığını var ve sen de bu yığının içinden sana lazım olanı çekip çıkarıyorsun gibi düşünebilirsin. Gerçekten de öyle çalışıyorlar, inanılmaz pratikler.
Özellikle veritabanlarıyla uğraşırken, hele ki sorgular yazıyorsak, bu fonksiyonlar bizim en yakın arkadaşlarımızdan biri oluyor. Düşünsenize, binlerce, milyonlarca satır var. Tek tek saymak mı? Ya da elle toplamak mı? Akıl kârı değil tabii. İşte tam burada SQL’in bu harika agregasyon fonksiyonları devreye giriyor ve bizim yerimize o zahmetli işleri pıt diye hallediveriyor. Ne güzel değil mi?
Mesela bir e-ticaret sitesi düşünelim. Ürünler var, satışlar var. Kaç farklı ürünümüz var? En ucuz ürün ne kadar? En pahalı ürün ne kadar? Bugüne kadar toplam ne kadar gelir elde ettik? Ortalama sipariş tutarı ne kadar? İşte bu soruların hepsi bu fonksiyonlarla kolayca cevaplanabilir. İnanın ki, bu fonksiyonları bilmek ve doğru yerde kullanmak, veri analizi konusunda size büyük bir avantaj sağlar.
Öncelikle gelin en bilineninden başlayalım: COUNT. Bu bildiğiniz saymak. Bir tablodaki toplam satır sayısını, belirli bir koşula uyan satır sayısını, hatta bir kolondaki boş olmayan (NULL olmayan) değerlerin sayısını bulmak için kullanılır. Mesela bir öğrenci tablosunda kaç öğrenci olduğunu görmek istiyorsanız, `COUNT(*)` yeterli olacaktır. Veya ‘Aktif’ durumundaki kaç kullanıcı olduğunu bulmak isterseniz, `COUNT(CASE WHEN durum = ‘Aktif’ THEN 1 END)` gibi bir şey kullanabilirsiniz. Bu arada, `COUNT(kolon_adı)` ile sadece o kolonda veri olan satırları saydığınızı unutmayın. Yani NULL değerleri es geçer. Çok kullanışlı.
Sonra geliyor SUM, yani toplam. Adı üstünde, belirli bir kolonun değerlerini toplar. Bir satış tablosunda ‘Tutar’ kolonunu toplamak istediğinizde `SUM(Tutar)` dediğinizde size anında toplam satış tutarını verir. Veya bir stok tablosunda ‘Miktar’ kolonunu toplayıp mevcut toplam stok miktarını bulabilirsiniz. Bu fonksiyonlar, özellikle finansal raporlama veya envanter takibi gibi alanlarda inanılmaz derecede hayat kurtarıcı oluyor, gerçekten. Sadece sayılarla çalışır tabii, metinleri falan toplayamazsınız. Ne yapsın, onun da sınırları var.
Gelelim AVG’ye, yani ortalamaya. Bu da yine bizim hayatımızı kolaylaştıranlardan. Belirli bir kolondaki değerlerin ortalamasını hesaplar. Mesela bir sınıftaki öğrencilerin not ortalamasını bulmak için `AVG(Not)` diyebilirsiniz. Veya bir maaş tablosunda çalışanların ortalama maaşını öğrenmek için `AVG(Maas)` sorgusu yeterli olur. Bu arada, ortalama hesaplarken yine NULL değerleri hesaba katmaz. Yani ortalamayı sadece kayıtlı değerler üzerinden hesaplar, bu da genelde istediğimiz şeydir zaten, değil mi?
Ve işte MIN ve MAX. Bunlar da en küçük ve en büyük değeri bulmak için kullanılır. Bir ürün listesinde en ucuz ürünün fiyatını öğrenmek istediğinizde `MIN(Fiyat)` dersiniz, en pahalısını bulmak için de `MAX(Fiyat)` yeterli olur. Bir tarih kolonunda en eski veya en yeni kaydı bulmak da mümkün. Bunlar böyle en uç değerleri yakalamak için birebir. Hani bazen bir grafiğe bakarsın da ‘En dip nokta neresiydi?’ ya da ‘En tepe nokta neydi?’ diye merak edersin ya, işte o zaman bu fonksiyonlar imdadınıza yetişir.
Şimdi gelelim bu arkadaşları nasıl kullanacağımıza dair küçük bir kod örneğine. Diyelim ki bir sipariş tablomuz var ve bu tablonun içinde ‘SiparisID’, ‘UrunAdi’, ‘Miktar’ ve ‘Fiyat’ gibi kolonlar bulunuyor. Biz de bu tablodaki toplam sipariş sayısını, toplam elde edilen geliri ve ortalama sipariş tutarını öğrenmek istiyoruz. Eski usul manuel sayıp toplamak yerine, SQL sorgusuyla bunu pıt diye halledebiliriz.
Öncelikle, tek bir sorguda bu bilgilerin hepsini almak mümkün. Şöyle bir şey düşünebiliriz: Önce toplam sipariş sayısını bulmak için `COUNT(SiparisID)` kullanırız, sonra toplam geliri bulmak için her bir siparişin miktarını fiyatıyla çarpıp toplarız, yani `SUM(Miktar * Fiyat)`. Ardından da ortalama sipariş tutarını bulmak için `AVG(Miktar * Fiyat)` deriz. Bunları tek bir `SELECT` ifadesinde birleştirince, sonuç karşımıza hazır bir şekilde gelir. Ne kadar kolay değil mi?
Şimdi gelin buna benzer ama biraz daha farklı bir senaryo üzerinden gidelim. Diyelim ki sadece belirli bir ürünün toplam satış miktarını ve bu satışlardan elde edilen toplam geliri bulmak istiyoruz. Burada `WHERE` koşulu devreye girer. Mesela ‘Laptop’ ürününün toplam kaç adet satıldığını ve bu satışlardan ne kadar gelir elde edildiğini görmek istesek, sorgumuz şöyle bir şey olurdu:
“`sql — YANLIŞ: Sadece toplam geliri hesaplıyor ama miktar toplamını almıyor SELECT SUM(Fiyat) AS ToplamGelir FROM Siparisler WHERE UrunAdi = ‘Laptop’; “`
Bu sorgu sadece ‘Laptop’ ürününün satışlarından elde edilen toplam geliri verir. Ama biz hem toplam gelirini hem de toplam satılan miktarını istiyoruz. İşte burada hem `SUM(Fiyat)` hem de `SUM(Miktar)`’ı birlikte kullanmamız gerekiyor.
“`sql — DOĞRU: Toplam miktar ve toplam geliri aynı anda hesaplıyor SELECT COUNT(SiparisID) AS ToplamSiparisSayisi, SUM(Miktar * Fiyat) AS ToplamGelir, AVG(Miktar * Fiyat) AS OrtalamaSiparisTutari, MIN(Fiyat) AS EnDusukFiyat, MAX(Fiyat) AS EnYuksekFiyat FROM Siparisler;
— Belirli bir ürün için (örneğin ‘Laptop’) SELECT SUM(Miktar) AS LaptopToplamMiktar, SUM(Miktar * Fiyat) AS LaptopToplamGelir FROM Siparisler WHERE UrunAdi = ‘Laptop’; “`
İşte bu kadar! Gördüğünüz gibi, MIN ve MAX fonksiyonlarını da ekleyerek en düşük ve en yüksek fiyatı da bulduk. Bu arada, bu fonksiyonları kullanırken dikkat etmeniz gereken bir nokta var: NULL değerler. SUM, AVG, MIN, MAX fonksiyonları varsayılan olarak NULL değerleri göz ardı eder. Yani bir siparişin fiyatı NULL ise, o sipariş ortalamaya veya toplama dahil edilmez. Eğer NULL değerleri de hesaba katmak isterseniz, `COALESCE` gibi fonksiyonlarla onları 0 ile değiştirebilirsiniz. Örneğin `SUM(COALESCE(Fiyat, 0))` gibi. Bu bazen işinize yarayabilir, tabi.
Bu fonksiyonlar, veri analizi ve raporlama için gerçekten temel taşlardan. Öğrenmesi kolay, kullanımı pratik ve her zaman işe yarar. Bu arada, bu fonksiyonların sadece sayısal kolonlar için geçerli olduğunu unutmayın. Metin kolonları için COUNT dışında pek kullanışlı olmazlar sanırım. Ama sayısal verilerle çalışırken, elinizin altında mutlaka olması gereken araçlar bunlar. İnanın ki, bunları doğru öğrenmek, verilerle daha rahat konuşmanızı sağlayacak.
Neticede, bu agregasyon fonksiyonları sayesinde büyük veri kümeleriyle bile başa çıkmak çok daha kolay hale geliyor. Veritabanınızdaki bilgileri daha derinlemesine anlamak, trendleri yakalamak ve bilinçli kararlar almak için bu fonksiyonları mutlaka öğrenmeli ve kullanmalısınız. Belki ilk başta biraz kafa karıştırıcı gelebilir ama birkaç örnekle pekiştirdikten sonra ne kadar basit olduklarını göreceksiniz. Bu arada, bu konuda daha fazla bilgi almak isterseniz, Google’da basit bir arama ile birçok kaynak bulabilirsiniz. YouTube’da da bolca anlatım mevcut, bir göz atın derim.
Umarım bu yazı, COUNT, SUM, AVG, MIN, MAX fonksiyonlarını anlamanızda yardımcı olmuştur. Unutmayın, veriyi anlamak, onu doğru sorgulamaktan geçer. Hadi bakalım, şimdi siz de kendi verilerinize bu fonksiyonlarla bir göz atın!