İçeriğe geç
Educora
Başlangıç14 dk6 / 22

Toplama fonksiyonları: COUNT, SUM, AVG, MIN, MAX

Çok sayıda satırı tek bir sayıya dönüştür: satırları say, değerleri topla; ortalamayı, en küçük ve en büyük değeri bul.

Kendini test et
Bu derste öğreneceklerin
  • Beş temel toplama fonksiyonunu kullanmak
  • COUNT(*), COUNT(sütun) ve COUNT(DISTINCT sütun) arasındaki farkı açıklamak
  • Toplama fonksiyonlarını WHERE ile birlikte kullanmak ve NULL değerlerin etkisini bilmek

Öğretmenin her öğrencinin puanına değil, sınıfın ortalamasına ihtiyacı vardır. Mağaza sahibi her siparişe tek tek bakmak yerine toplam satışı bilmek ister. Bu tür soruların cevabı bir satır listesi değil, tek bir sayıdır. SQL'de bu sayıları toplama (aggregate) fonksiyonları hesaplar.

Toplama fonksiyonu nedir?

Tanım
Toplama fonksiyonu

Çok sayıda satırın değerlerini alıp onlardan tek bir sonuç hesaplayan fonksiyon. Sıradan bir fonksiyon (örneğin ROUND) her satırda ayrı çalışır; toplama fonksiyonu ise tüm satırlar üzerinde birden çalışır.

FonksiyonNe döndürür
COUNT(*)satır sayısını
COUNT(x)x'in NULL olmayan değerlerinin sayısını
SUM(x)değerlerin toplamını
AVG(x)ortalamayı
MIN(x)en küçük değeri
MAX(x)en büyük değeri

COUNT: sayma

COUNT fonksiyonunun üç biçimi vardır. COUNT(*) tüm satırları sayar. COUNT(email) yalnızca email sütununda değeri olan satırları sayar; iki öğrencinin e-postası NULL olduğu için sonuç 10'dur. COUNT(DISTINCT city) ise farklı şehirlerin sayısını verir.

SQL
SELECT COUNT(*)             AS students,
       COUNT(email)         AS with_email,
       COUNT(DISTINCT city) AS cities
FROM students;
▸ Beklenen çıktı
students | with_email | cities
12 | 10 | 7

SUM, AVG, MIN ve MAX

Bir sorguda birkaç toplama fonksiyonu birlikte yazılabilir. Ortalama çoğu zaman uzun bir ondalıklı sayıdır (burada 293,558); bu yüzden onu ROUND ile yuvarlarız. Sonuç her zaman tek bir satırdır, çünkü tüm tablo tek bir grup olarak özetlenir.

SQL
SELECT SUM(stock)            AS total_items,
       ROUND(AVG(price), 2)  AS avg_price,
       MIN(price)            AS cheapest,
       MAX(price)            AS most_expensive
FROM products;
▸ Beklenen çıktı
total_items | avg_price | cheapest | most_expensive
1086 | 293.56 | 3.2 | 1450

MIN ve MAX yalnızca sayılarla değil, metin ve tarihlerle de çalışır. YYYY-MM-DD biçimindeki tarihler için MIN en erken, MAX en geç tarihi verir.

SQL
SELECT MIN(order_date) AS first_order,
       MAX(order_date) AS last_order
FROM orders;
▸ Beklenen çıktı
first_order | last_order
2025-01-15 | 2025-07-07

Toplama fonksiyonlarıyla hesaplama

Bir toplama fonksiyonunun sonucu sıradan bir sayıdır; bu yüzden onunla hesap yapılabilir. MAX(age) - MIN(age) en büyük ve en küçük yaş arasındaki farkı verir. E-postası olan öğrencilerin yüzdesini bulmak için COUNT(email) değerini COUNT(*) değerine bölüp 100 ile çarparız. Dikkat: 100 * 10 / 12 tam sayı bölmesidir ve 83 verir; kesin sonuç için 100.0 yazarız.

SQL
SELECT MAX(age) - MIN(age) AS age_range,
       100 * COUNT(email) / COUNT(*) AS int_pct,
       ROUND(100.0 * COUNT(email) / COUNT(*), 1) AS pct_with_email
FROM students;
▸ Beklenen çıktı
age_range | int_pct | pct_with_email
3 | 83 | 83.3
int_pct, tam sayı bölmesi yüzünden ondalık kısmını kaybetti.

Toplama fonksiyonları ve WHERE

WHERE, toplama fonksiyonundan önce çalışır: önce satırlar filtrelenir, sonra hesaplama yalnızca kalan satırlar üzerinde yapılır. Aşağıda yalnızca 1 numaralı dersin (Algebra) kayıtlarını alıyoruz: 4 öğrenci, ortalama puan 87,3.

SQL
SELECT COUNT(*)             AS enrollments,
       ROUND(AVG(score), 1) AS avg_score,
       MIN(score)           AS min_score,
       MAX(score)           AS max_score
FROM enrollments
WHERE course_id = 1;
▸ Beklenen çıktı
enrollments | avg_score | min_score | max_score
4 | 87.3 | 75 | 97
Örnek görev

Depodaki tüm malların toplam değeri nedir?

Çözümü göster
Her ürünün değeri price * stock ifadesidir.
Toplama fonksiyonunun içine ifade yazılabilir: SUM(price * stock).
VTYS önce her satır için çarpımı hesaplar, sonra bunları toplar: 40260,6.
SQL
SELECT SUM(price * stock) AS warehouse_value
FROM products;
▸ Beklenen çıktı
warehouse_value
40260.6
SQL
SELECT AVG(age) AS avg_age
FROM students;
▸ Beklenen çıktı
avg_age
15.5
Alıştırma

1 numaralı dersin (Algebra) özetini çıkar: kayıt sayısı (students), virgülden sonra 1 basamağa yuvarlanmış ortalama puan (avg_score) ve en yüksek puan (best).

Alıştırma · SQL
SELECT COUNT(*) AS students
       -- add avg_score and best
FROM enrollments
WHERE course_id = 1;
▸ Beklenen çıktı
students | avg_score | best
4 | 87.3 | 97
Alıştırma

Electronics kategorisi için ürün sayısını (products), depodaki toplam adedi (total_stock) ve en düşük fiyatı (cheapest) bul.

Alıştırma · SQL
SELECT
  -- three aggregates here
FROM products
WHERE category = 'Electronics';
▸ Beklenen çıktı
products | total_stock | cheapest
4 | 63 | 120.5

Önemli noktalar

  • Toplama fonksiyonu çok sayıda satırdan tek bir sonuç hesaplar: COUNT, SUM, AVG, MIN, MAX.
  • COUNT(*) tüm satırları, COUNT(x) NULL olmayanları, COUNT(DISTINCT x) farklı değerleri sayar.
  • WHERE toplama fonksiyonundan önce çalışır; hesaplama yalnızca filtrelenmiş satırlarla yapılır.
  • Toplama fonksiyonları (COUNT(*) hariç) NULL değerleri atlar.
  • Toplama fonksiyonunu GROUP BY olmadan sıradan bir sütunla karıştırma; çoğu VTYS bunu hata sayar.

Kendini test et

10 soru. Her doğru cevap XP kazandırır.

1 / 10
students tablosunda COUNT(*) 12, COUNT(email) ise 10 veriyor. Neden?