SQL Aggregate Fonksiyonları Nelerdir SUM AVG ve COUNT Örnekleri
SQL Aggregate fonksiyonları, bir veri tabanı tablosunda yer alan birden fazla satırdaki veriyi alıp işleyerek tek bir özet değer üreten hazır SQL komutlarıdır. Günlük operasyonlardan üst düzey stratejik kararlara kadar, **milyonlarca satırdan oluşan ham verileri anlamlı istatistiklere, finansal raporlara ve yönetici özetlerine dönüştürmek için SQL aggregate fonksiyonları vazgeçilmez bir araçtır.**
- SQL Aggregate fonksiyonlarının ne olduğunu ve temel çalışma mantığını öğreneceksiniz.
- COUNT, SUM, AVG, MIN ve MAX fonksiyonlarının kullanım senaryolarını kavrayacaksınız.
- GROUP BY ve HAVING komutlarıyla gelişmiş raporlama sorguları yazabileceksiniz.
- Aggregate fonksiyonlarında NULL değerlerin nasıl işlendiğini ve yapılan yaygın hataları fark edeceksiniz.
- Aggregate fonksiyonları sütun bazlı çalışır ve girdilerini birden fazla satırdan alır.
- `COUNT(*)` hariç tüm toplulaştırma fonksiyonları hesaplamaya `NULL` değerleri dahil etmez.
- Filtreleme işlemlerinde `WHERE` bireysel satırları süzerken, gruplanmış verileri süzmek için `HAVING` kullanılır.
- Bu fonksiyonlar, `SELECT` listesinde gruplanmamış sütunlarla doğrudan tek başına yan yana yazılamaz; mutlaka `GROUP BY` gereklidir.
SQL Aggregate Fonksiyonları Nedir ve Ne İşe Yarar?
Veri tabanlarında saklanan veriler çoğunlukla işlenmemiş ham kayıtlar halindedir. Örneğin, bir e-ticaret platformunun veritabanında gerçekleştirilen her bir sipariş ayrı bir satır olarak saklanır. Yönetim ekibi sizden “Bu ay kaç sipariş aldık?” ya da “Toplam satış ciromuz ne kadar?” gibi soruların yanıtını istediğinde, yüz binlerce satırı tek tek incelemek elbette imkansızdır. İşte bu noktada devreye, kümeleme veya toplulaştırma fonksiyonları şeklinde de adlandırılan SQL Aggregate fonksiyonları girer.
Aggregate fonksiyonları, veri setinizdeki belirli bir sütunda yer alan çok sayıda satırı girdi olarak kabul eder. Bu verileri matematiksel veya istatistiksel bir işleme tabi tutarak sonucunda tek hücrelik özlü bir değer üretir. Dolayısıyla büyük veri analizinde, veri madenciliğinde ve iş zekası raporlamalarında ilk adımı her zaman bu komutlar oluşturur.
Temel SQL Aggregate Fonksiyonları Özeti
Sıkça başvurulan beş temel SQL aggregate fonksiyonu ve bunların üstlendiği işlevler aşağıdaki tabloda özetlenmiştir. Bu komutlar; MySQL, PostgreSQL, MS SQL Server, Oracle ve SQLite dâhil tüm ilişkisel veri tabanı yönetim sistemlerinde standart olarak desteklenir.
| Fonksiyon | İşlevi | Temel Sözdizimi (Syntax) |
|---|---|---|
| COUNT() | Satır veya değer sayısını hesaplar. | SELECT COUNT(sütun) FROM tablo; |
| SUM() | Sayısal değerlerin toplamını alır. | SELECT SUM(sütun) FROM tablo; |
| AVG() | Sayısal değerlerin ortalamasını bulur. | SELECT AVG(sütun) FROM tablo; |
| MIN() | En küçük (minimum) değeri getirir. | SELECT MIN(sütun) FROM tablo; |
| MAX() | En büyük (maksimum) değeri getirir. | SELECT MAX(sütun) FROM tablo; |
COUNT Fonksiyonu Kullanımı ve Örnekleri
SQL COUNT() fonksiyonu, tanımlanan bir kritere veya sütuna ait kayıt (satır) sayısını tespit etmek için kullanılır. Veri tabanınızda kaç adet müşteri, ürün ya da işlem bulunduğunu öğrenmek istediğinizde ilk başvuracağınız komut budur. COUNT fonksiyonunun yaygın olarak kullanılan üç farklı varyasyonu vardır. Benzer bir mantığın sorgu mimarilerinde nasıl işlediğini SQL Subquery (Alt Sorgu) Kullanımı ve Örnekleri rehberimiz üzerinden de inceleyebilirsiniz.
1. COUNT(*) İfadesi
COUNT(*), ilgili tablodaki toplam satır sayısını verir. Satırlarda NULL (boş) değerlerin bulunup bulunmadığına bakmaksızın tüm kayıtları hesaba katar.
Sistemde kayıtlı toplam öğrenci sayısını öğrenmek için aşağıdaki sorguyu çalıştırabilirsiniz:
SELECT COUNT(*) AS ToplamOgrenciSayisi
FROM Ogrenciler;2. COUNT(sütun_adı) İfadesi
Belirli bir sütun adını parametre olarak aktardığınızda, COUNT(sütun_adı) yalnızca o sütunda NULL olmayan (dolu) verilerin sayısını döndürür.
Sadece telefon bilgisi sisteme girilmiş öğrencileri saymak için:
SELECT COUNT(Telefon) AS TelefonuOlanOgrenciSayisi
FROM Ogrenciler;3. COUNT(DISTINCT sütun_adı) İfadesi
Aynı değere sahip mükerrer (tekrarlayan) kayıtları ayıklayarak yalnızca benzersiz değerlerin sayısını verir.
Öğrencilerin toplamda kaç farklı şehirden katılım sağladığını tespit etmek için:
SELECT COUNT(DISTINCT Sehir) AS FarkliSehirSayisi
FROM Ogrenciler;COUNT(*) ile COUNT(sütun_adı) arasındaki en kritik fark NULL yönetimidir. İncelenen sütunda boş bırakılmış satırlar yer alıyorsa, COUNT(sütun_adı) sonucu COUNT(*) değerinden daha düşük çıkacaktır.SUM Fonksiyonu Kullanımı ve Örnekleri
SQL SUM() fonksiyonu, sayısal veri tipine sahip bir sütundaki değerlerin toplamını hesaplar. Metin (VARCHAR) ya da tarih (DATE) gibi sayısal nitelikte olmayan alanlarda çalışmaz. Finansal raporlamalarda, stok miktarı analizlerinde veya toplam puan hesaplamalarında sıkça kullanılır.
Aşağıdaki Satislar tablosundan toplam ciro değerini elde edelim:
SELECT SUM(Tutar) AS ToplamCiro
FROM Satislar;SUM() fonksiyonu temel aritmetik işlemlerle bir arada da kullanılabilir. Örneğin, bir sipariş tablosunda birim fiyat ile adet değerlerini çarparak genel toplamı tek hamlede hesaplayabilirsiniz:
SELECT SUM(BirimFiyat * Adet) AS GenelToplam
FROM SiparisDetaylari;AVG Fonksiyonu Kullanımı ve Örnekleri
SQL AVG() (Average) fonksiyonu, sayısal bir sütunda yer alan değerlerin aritmetik ortalamasını çıkarır. Bu fonksiyon, ilgili sütundaki değerlerin toplamını NULL olmayan satır sayısına bölerek sonucu üretir.
Öğrencilerin matematik dersinden aldığı notların ortalamasını hesaplamak için:
SELECT AVG(Notu) AS MatematikOrtalamasi
FROM Sinavlar
WHERE DersAdi = 'Matematik';Ortalama hesaplamalarında virgülden sonra çok sayıda basamak oluşabilir. Çıktıyı sadeleştirmek ve daha okunabilir hale getirmek adına genelde ROUND() fonksiyonundan destek alınır:
SELECT ROUND(AVG(Notu), 2) AS YuvarlanmisOrtalama
FROM Sinavlar;MIN ve MAX Fonksiyonları Kullanımı ve Örnekleri
MIN() fonksiyonu belirtilen sütundaki en küçük değeri getirirken, MAX() fonksiyonu ise en büyük değeri bulur. Sayısal verilerin yanı sıra metinsel ve tarihsel sütunlarda da sorunsuz şekilde çalışırlar.
- Sayısal Verilerde: En düşük veya en yüksek fiyatı/puanı tespit eder.
- Tarih Verilerinde:
MIN()en eski tarihi (en erken),MAX()ise en yeni tarihi (en güncel) döndürür. - Metin Verilerinde: Alfabetik sıralamaya göre en başta (A) veya en sonda (Z) yer alan kaydı sunar.
SELECT
MIN(Fiyat) AS EnUcuzUrun,
MAX(Fiyat) AS EnPahaliUrun
FROM Urunler;SELECT MAX(SiparisTarihi) AS EnSonSiparisTarihi
FROM Siparisler;GROUP BY İfadesi ile Aggregate Fonksiyonlarının Kullanımı
Aggregate fonksiyonları tek başlarına çağrıldıklarında tüm tabloyu tek bir grup kabul eder ve tek satırlık genel bir özet üretir. Oysa çoğu senaryoda verileri kategorilerine, departmanlarına veya tarihlerine göre ayrıştırıp her grup için ayrı özetler elde etmek isteriz. Bu tür ihtiyaçlarda GROUP BY tümceciği devreye girer.
GROUP BY, bir veya daha fazla sütundaki ortak değerlere sahip satırları tek bir özet satır altında bir araya getirir.
Bir şirketteki her departmanın ortalama maaş düzeyini öğrenmek için:
SELECT Departman, AVG(Maas) AS OrtalamaMaas
FROM Personeller
GROUP BY Departman;SELECT bölümünde bu fonksiyona dahil edilmeyen yalın bir sütun adı yer alıyorsa, o sütun adını mutlaka GROUP BY ifadesine eklemelisiniz. Aksi halde veri tabanı motoru sözdizimi hatası dönecektir.HAVING Şartı ile Gruplanmış Verileri Filtreleme
SQL öğrenirken sıkça karıştırılan konulardan biri WHERE ile HAVING arasındaki farktır. Klasik WHERE koşulu, satırlar henüz gruplanmadan önce filtreleme yapar. Gruplanmış ve kümelenmiş sonuçlar (yani Aggregate fonksiyon çıktısı) üzerinde süzme işlemi uygulamak istediğimizde ise HAVING kullanılır.
WHERE: Satır düzeyinde filtreleme yapar. Yapısında Aggregate fonksiyonlar kullanılamaz.HAVING: Grup düzeyinde filtreleme yapar. Doğrudan Aggregate fonksiyon sonuçlarını baz alarak süzme gerçekleştirir.
SELECT KategoriAdi, SUM(Tutar) AS ToplamSatis
FROM Satislar
GROUP BY KategoriAdi
HAVING SUM(Tutar) > 50000;Aggregate Fonksiyonlarında NULL Değerlerin Yönetimi
Veri tabanı mimarisinde eksik veya bilinmeyen verileri temsil eden NULL değerler, kümeleme fonksiyonlarında alışılagelmişin dışında davranabilir. Doğru analiz sonuçlarına ulaşmak için NULL mantığını netleştirmek önemlidir. İleri seviye sorgularda bu yapının etkilerini görmek için Alt Sorgu Subquery Yazımı ve İç İçe Sorgu Örnekleri kılavuzumuza göz atabilirsiniz.
COUNT(*)istisnası haricinde tüm aggregate fonksiyonları (SUM,AVG,MIN,MAX,COUNT(sütun))NULLdeğerleri tamamen yok sayar ve hesaba katmaz.- Bu durum bilhassa
AVG()kullanımında ciddi sapmalara yol açabilir. Sözgelimi; 4 öğrenciden 3’ünün notu 100, 80, 60 ve 1 öğrencinin notuNULLiseAVG()sonucu(100+80+60)/3 = 80şeklinde hesaplanır. EğerNULLdeğerin 0 kabul edilip 4’e bölünmesi gerekiyorsa,COALESCE()veyaNVL()gibi fonksiyonlarlaNULLalanlar önceden sıfıra dönüştürülmelidir.
SELECT AVG(COALESCE(Notu, 0)) AS GercekOrtalama
FROM Sinavlar;Gerçek Senaryolarla Çözümlü SQL Örnekleri
Öğrenilen ilkeleri pekiştirmek amacıyla iş hayatında sıkça karşılaşabileceğiniz üç farklı senaryoyu çözümleriyle birlikte inceleyelim.
Senaryo 1: Kategori Bazlı Stok ve Fiyat Analizi
Soru: Mağazanızdaki her ürün kategorisi için toplam ürün çeşidini, en pahalı ürünün fiyatını ve ortalama ürün fiyatını listeleyen SQL sorgusunu yazınız.
SELECT
KategoriID,
COUNT(*) AS UrunCesidi,
MAX(Fiyat) AS EnPahaliFiyat,
ROUND(AVG(Fiyat), 2) AS OrtalamaFiyat
FROM Urunler
GROUP BY KategoriID;Senaryo 2: 5’ten Fazla Sipariş Veren Müşterilerin Listesi
Soru: Sistemde en az 5 adet onaylanmış siparişi bulunan müşterilerin Müşteri ID’lerini ve toplam sipariş sayılarını en yüksekten en düşüğe doğru sıralayarak listeleyiniz.
SELECT
MusteriID,
COUNT(SiparisID) AS ToplamSiparisSayisi
FROM Siparisler
WHERE Durum = 'Onaylandi'
GROUP BY MusteriID
HAVING COUNT(SiparisID) >= 5
ORDER BY ToplamSiparisSayisi DESC;Senaryo 3: Yıllara Göre Müşteri Harcamaları
Soru: 2023 yılında yapılan satışlarda, toplam harcaması 10.000 TL üzerinde gerçekleşen müşterilerin Müşteri ID ve toplam harcama tutarlarını bulunuz.
SELECT
MusteriID,
SUM(Tutar) AS ToplamHarcama
FROM Satislar
WHERE YEAR(SatisTarihi) = 2023
GROUP BY MusteriID
HAVING SUM(Tutar) > 10000;- Bir tablodaki boş (NULL) olanlar dahil tüm satırların sayısını öğrenmek için hangi komut kullanılır?
WHEREileHAVINGarasındaki temel fark nedir? Hangi durumlardaHAVINGkullanılması zorunludur?- 5, 10, 15 ve NULL değerlerini içeren bir sütunda
AVG()çalıştırılırsa sonuç kaç çıkar? COUNT(DISTINCT Unvan)sorgusu ne tür bir çıktı sağlar?
- SQL Aggregate fonksiyonları (COUNT, SUM, AVG, MIN, MAX) çoklu satır verilerini tek bir özet değere dönüştürür.
COUNT(*)tüm satırları sayarken,COUNT(sütun)yalnızca NULL olmayan satırları hesaplar.- Gruplandırılmış raporlar oluşturmak için bu fonksiyonlar
GROUP BYtümceciği ile kombine edilir. - Gruplanmış veri kümeleri üzerinde filtreleme şartı koymak için
WHEREyerineHAVINGkullanılır. - Hesaplamalara NULL değerlerin nasıl etki ettiğini bilmek doğru analiz sonuçları elde etmek için kritik önem taşır.
Öğrendiklerinizi Pekiştirin ve Bir Sonraki Adıma Geçin
SQL’de Aggregate fonksiyonları; veri analisti, yazılım geliştirici veya veri tabanı yöneticisi olma yolundaki en temel köşe taşlarından biridir. Ele aldığımız SUM, AVG, COUNT, MIN ve MAX fonksiyonlarını bolca pratik yaparak pekiştirmeli; GROUP BY ve HAVING kombinasyonlarıyla kendi senaryolarınızı oluşturmalısınız. Bir sonraki aşamada, birden fazla tabloyu birleştirerek kapsamlı raporlar hazırlamanızı sağlayacak **SQL JOIN İşlemleri** konusuna geçiş yapabilirsiniz. Veri mimarisi bakış açınızı genişletmek için NoSQL ve SQL Karşılaştırması Farklar ve Kullanım Senaryoları başlıklı rehberimizi de inceleyebilirsiniz.
Sıkça Sorulan Sorular
SQL Aggregate fonksiyonlarında NULL değerler nasıl işlenir?
Aggregate fonksiyonları (COUNT(*) hariç) hesaplamalara NULL değerleri dahil etmez ve bunları yok sayar.
COUNT(*) ile COUNT(sütun_adı) arasındaki fark nedir?
COUNT(*) tablodaki tüm satırları NULL değerler dahil olmak üzere sayarken, COUNT(sütun_adı) yalnızca belirtilen sütunda NULL olmayan (NOT NULL) değerlerin sayısını döndürür.
Aggregate fonksiyonları WHERE ifadesi içinde kullanılabilir mi?
Hayır, aggregate fonksiyonları doğrudan WHERE koşulu içinde kullanılamaz. Gruplanmış veriler üzerinde aggregate sonuçlarına göre filtreleme yapmak için HAVING ifadesi kullanılmalıdır.
AVG fonksiyonu hesaplama yaparken NULL değerleri sıfır olarak mı kabul eder?
Hayır, AVG fonksiyonu NULL değerleri tamamen göz ardı eder ve ortalamayı yalnızca NULL olmayan satırların toplamını bu satırların sayısına bölerek hesaplar. NULL değerleri 0 saymak isterseniz COALESCE veya ISNULL fonksiyonu kullanmalısınız.
Sıkça Sorulan Sorular
- Microsoft Learn – Aggregate Functions (Transact-SQL) — SQL Server üzerindeki SUM, AVG, COUNT gibi toplulaştırma fonksiyonlarının sentaksı ve detaylı teknik kullanımı.
- PostgreSQL Documentation – Aggregate Functions — PostgreSQL veri tabanı yönetim sisteminde aggregate fonksiyonlarının çalışma mantığı ve gruplama kuralları.
- W3Schools SQL Aggregate Functions — Temel SQL aggregate fonksiyonlarının kullanım senaryoları ve pratik kod örnekleri.


