51  Toplam (Aggregate) fonksiyonları

Aggregate fonksiyonları genellikle group by ve having ile kullanılırlar. Ama tüm tablo üzerinde de çalışırlar.

Fonksiyon Tanım
MIN En düşük değer
MAX En yüksek değer
COUNT Kayıt sayısı
SUM Toplam değer
AVG Averaj değer
aggregate_function(DISTINCT|ALL ifade) 

kullanılabilir.

Aşağıdaki sorgu 3 farklı değer, 59,57,59 döndürecektir çünkü çalışan tablosunda aynı FirstName değerleri vardır. Eğer kullanılmazsa ALL varsayılan değerdir.

SELECT COUNT(c.FirstName), 
COUNT(DISTINCT c.FirstName), 
COUNT(ALL c.FirstName)
FROM Customer c;

Ifade genellikle bir kolon ismidir ama SQL’in anladığı tüm ifadeler kullanılabilir. Örneğin aşağıda ismi E ile başlayanlar için 0 veya 1 dönüyor. Arkasından bu ifade toplanarak kaç tane ismin E ile başladığı görülebiliyor. Bu ifade yerinde where içinde gördüğümüz <,= IS NULL gibi operatorler kullanılabilir.

SELECT SUM(c.FirstName LIKE 'E%')
FROM Customer c;

Count

Aşağıdaki sorgu Müşteri tablosundaki kayıt sayısını getirir.

SELECT COUNT(*) FROM Customer;

COUNT() ile COUNT(KolonAdi) null değerlerde farklı çalışır. COUNT() tüm değerleri sayarken, COUNT(KolonAdi) sadece null olmayan değerleri sayar.

Aşağıdaki sorgu Müşteri tablosundaki kayıt sayısını doğru getirir çünkü CustomerId kolonu not null (null’a izin yok) bir kolondur.

SELECT COUNT(CustomerId) FROM Customer;

Ama aşağıdaki sorgu 55 değerini getirecektir çünkü PostalCode null olan satırlar vardır.

SELECT COUNT(PostalCode) FROM Customer;

Aşağıdaki sorgu her albumdeki parça sayısını göstermektedir.

SELECT 
t.AlbumId,
COUNT(t.TrackId) AS ParcaSayisi
FROM Track t 
GROUP BY t.AlbumId 
ORDER BY 2

SUM

Verilen kolon değerlerini toplar.

Aşağıdaki sorgu toplam invoice değerini getirir.

SELECT SUM(Total) FROM Invoice i;

SUM kullanarak belirli bir duruma uyan kayıt sayısı bulunabilir.

SELECT SUM(c.SupportRepId IS NULL)
,SUM(c.SupportRepId IS NOT NULL)
,SUM(c.FirstName LIKE 'A%')
FROM Customer c;

Aşağıdaki sorgu album uzunluğunu dakika olarak bulur.

SELECT 
t.AlbumId,
SUM(t.Milliseconds) / 60_000 AS UzunlukDakika
FROM Track t 
GROUP BY t.AlbumId

AVG

Verilen kolon değerlerininin averajını bulur.

SELECT AVG(Total) FROM Invoice i;

Aşağıdaki sorgu parçaların (track) dakika olarak ortalama süresini bulur.

SELECT 
t.AlbumId,
ROUND(AVG(t.Milliseconds) / 60_000) AS AverajDakika
FROM Track t 
GROUP BY t.AlbumId

MIN

Verilen kolon değerlerininin minimum olanını bulur.

SELECT MIN(Total) FROM Invoice i;

Aşağıdaki sorgu en kısa parçayı saniye olarak bulur.

SELECT 
MIN(t.Milliseconds) / 1_000 AS EnKısaParcaSaniye
FROM Track t 

MAX

Verilen kolon değerlerininin maksimum olanını bulur.

SELECT MAX(Total) FROM Invoice i;

Aşağıdaki sorgu en uzun parçayı bulur.

SELECT 
MAX(t.Milliseconds) / 60_000 AS EnUzunParça
FROM Track t