Veri Tabanı Yönetimi ve SQL

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.**

⚡ Kısa Cevap: SQL Aggregate (toplulaştırma) fonksiyonları; SUM (toplam), AVG (ortalama), COUNT (satır sayısı), MIN (en küçük değer) ve MAX (en büyük değer) gibi komutlarla çoklu satır verilerini tek bir istatistiksel sonuca indirger. Genellikle verileri kategorize edip gruplamak amacıyla GROUP BY ifadesiyle birlikte kullanılırlar.
🎯 Bu Derste Öğrenecekleriniz
  • 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.
📌 Bu Konuda Bilmeniz Gerekenler
  • 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.

💡 İpucu: Aggregate kelimesi İngilizce’de “toplam”, “küme” veya “bir araya getirilmiş” anlamına gelir. SQL dünyasında bu terimle karşılaştığınızda, aklınıza doğrudan “çok sayıda satırdan tek bir özet sonuç üretme” işlemi gelmelidir.

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İşleviTemel 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.

📖 Örnek: Toplam Öğrenci Sayısını Bulma

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.

📖 Örnek: Telefon Numarası Kayıtlı Öğrenci Sayısı

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.

📖 Örnek: Farklı Şehir Sayısını Bulma

Öğrencilerin toplamda kaç farklı şehirden katılım sağladığını tespit etmek için:

SELECT COUNT(DISTINCT Sehir) AS FarkliSehirSayisi 
FROM Ogrenciler;
⚠️ Dikkat: 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.

📖 Örnek: Toplam Satış Tutarını Hesaplama

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:

📖 Örnek: Birim Fiyat ve Adet İle Toplam Hesaplama
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.

📖 Örnek: Sınav Not Ortalamasını Bulma

Öğ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:

📖 Örnek: Yuvarlatılmış Ortalama Hesaplama
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.
📖 Örnek: En Düşük ve En Yüksek Ürün Fiyatını Bulma
SELECT 
    MIN(Fiyat) AS EnUcuzUrun,
    MAX(Fiyat) AS EnPahaliUrun 
FROM Urunler;
📖 Örnek: En Son Yapılan Sipariş Tarihini Bulma
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.

📖 Örnek: Departman Bazında Ortalama Maaş Hesaplama

Bir şirketteki her departmanın ortalama maaş düzeyini öğrenmek için:

SELECT Departman, AVG(Maas) AS OrtalamaMaas 
FROM Personeller 
GROUP BY Departman;
⚠️ Altın Kurallardan Biri: Sorgunuzda bir Aggregate fonksiyonu kullanıyorsanız ve 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.
📖 Örnek: Toplam Satışı 50.000 TL’yi Geçen Kategoriler
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)) NULL değ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 notu NULL ise AVG() sonucu (100+80+60)/3 = 80 şeklinde hesaplanır. Eğer NULL değerin 0 kabul edilip 4’e bölünmesi gerekiyorsa, COALESCE() veya NVL() gibi fonksiyonlarla NULL alanlar önceden sıfıra dönüştürülmelidir.
📖 Örnek: NULL Değerleri Sıfır Kabul Ederek Ortalama Alma
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;
✏️ Kendinizi Test Edin
  1. Bir tablodaki boş (NULL) olanlar dahil tüm satırların sayısını öğrenmek için hangi komut kullanılır?
  2. WHERE ile HAVING arasındaki temel fark nedir? Hangi durumlarda HAVING kullanılması zorunludur?
  3. 5, 10, 15 ve NULL değerlerini içeren bir sütunda AVG() çalıştırılırsa sonuç kaç çıkar?
  4. COUNT(DISTINCT Unvan) sorgusu ne tür bir çıktı sağlar?
📝 Konu Özeti
  • 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 BY tümceciği ile kombine edilir.
  • Gruplanmış veri kümeleri üzerinde filtreleme şartı koymak için WHERE yerine HAVING kullanı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

❓ 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.
📚 Kaynaklar
  • 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.

Deniz Karay

DersMerkezi.net.tr’nin yazarı, eğitim alanında yıllara dayanan deneyime sahip bir uzmandır ve öğrencilerin öğrenme sürecini desteklemeyi hedefler. Matematik, fen bilimleri, tarih, dil ve edebiyat başta olmak üzere birçok ders alanında içerik üretir ve konuları sade, anlaşılır ve adım adım rehberler halinde sunar.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu