MS SQL’de oluşturduğumuz sorgular sonucu geriye dönen verileri yorumlamak bu veriler içinde minimum, maximum, toplam, ortalama ve verilerin sayısal değerini hesaplamak için toplama fonksiyonları olarak adlandırdığımız aggregate fonksiyonları kullanırız. Daha önceki yazılarımda matematiksel fonksiyonları tek bir veri işlemi üzerinde anlatmıştım. Bu fonksiyonları yalnızca tek bir veri üzerinde değil aynı zamanda birden fazla veri satırı üzerinde de işlem yapmamıza olanak sağlar.
Örneğin bir e-ticaret sitesi için yapılan tüm siparişlerin sayısını ve bu siparişlerin toplam tutarını listelemek, hesaplamak için bu fonksiyonu kullanırız. Bir kerede en az hangi sipariş değeri veya en fazla sipariş değerini bulabiliriz. Yapılan sipariş sayısı ve elde edilen gelire göre her sipariş başına elde edilen ortalama geliri bulabiliriz. En sık kullanılanları :
COUNT: Sorgu sonucu geriye dönen verilerin satırlarını veya herhangi bir kolon içinde yer alan verilerin (NULL verileri saymaz, hesaba katmaz) sayısını elde etmek için kullanılır.
SUM: Sayısal değerleri numerik olarak toplamak için kullanılır.
AVG: Sayısal değerlerin ortalamasını bulur.
MIN: Herhangi bir veri kümesindeki en küçük değeri bulur. Sayısal değerler üzerinde kullanılabildiği gibi string değerler üzerinde de kullanılabilir.
MAX: Herhangi bir veri kümesindeki en büyük değeri bulur. Sayısal değerler üzerinde kullanılabildiği gibi string değerler üzerinde de kullanılabilir.
Bu fonksiyonları kullanırken bazı dikkat edilecek noktalar vardır. Bu noktalar :
Syntax yani söz dizimi olarak kullanımı aşağıdaki gibidir :
SELECT Kullanılacak Fonksiyon (KolonAdı) FROM TabloAdı
Şimdi bir kaç uygulama ile yazımıza devam edelim. AdventureWorks2012 veri tabanı üzerinde çalışıyorum.
SELECT COUNT(*) AS "Satır Sayısı", MAX(TotalDue) AS "Maksimum Değer", MIN(TotalDue) AS "Minimum Değer", SUM(TotalDue) AS "Toplam Değer", AVG(TotalDue) AS "Ortalama Değer" FROM Sales.SalesOrderHeader
Sorgumuzda Sales.SalesOrderHeader tablosundaki TotalDue kolonunda yer alan tüm veriler için, bunu asterisk (*) kullanarak belirtiyoruz, verilerin sayıları (COUNT), veriler içindeki maksimum değer (MAX), veriler içindeki minimum değer (MIN), verilerin değerlerinin toplamını (SUM ve verilerin değerlerinin toplamının ortalamasını (AVG) ile listeliyoruz.
Bir diğer sorgumuz :
SELECT MIN(Name) AS "En Kısa İsim", MAX(Name) AS "En Uzun İsim", MIN(SellStartDate) AS "Satış Tarihleri İçinde En Erken Tarih", MAX(SellStartDate) AS "Satış Tarihleri İçinde En Geç Tarih" FROM Production.Product
Bu sorgumuzda da Production.Product tablosundaki en uzun ve en kısa isimleri NAME kolonundaki veriler içinden listeliyoruz. Aynı zamanda yine MIN ve MAX fonksiyonunu kullanarak aynı tablo üzerindeki SellStartDate kolonundaki yapılan satışların bilgisi içinden en erken ve en geç olan satışların tarihlerini listeliyoruz.
Şimdi de Sales.Customer tablosunda yer alan müşterilerin kaç tane olduğunu bulan sorguyu yazalım :
SELECT COUNT(*) AS "Müşteri Sayısı" FROM Sales.Customer
Sales.SalesOrderDetail tablosunda yer alan sipariş edilen ürünlerin toplam sayısını bulalım :
SELECT SUM(OrderQty) AS "Toplam Sipariş Edilen Ürün Sayısı" FROM Sales.SalesOrderDetail
Sales.SalesOrderDetail tablosunda UnitPrice kolonundaki veriler içinde yer alan en pahalı sipariş edilen ürünün fiyat bilgisini listeleyelim :
SELECT MAX(UnitPrice) AS "En Pahalı Sipariş Edilen Ürün Fiyatı" FROM Sales.SalesOrderDetail
Sales.SalesOrderHeader tablosunda Freight kolonunda yer alan bilgilere göre ortalama yüm miktarını bulalım.
SELECT AVG(Freight) AS "Ortalama Yük Miktarı" FROM Sales.SalesOrderHeader
Production.Product tablosundaki ListPrice kolonunda yer alan verilere göre bu veriler içindeki minimum, maksimum ve ortalama değeri bulalım.
SELECT MIN(ListPrice) AS "Minimum Fiyat", MAX(ListPrice) AS "MAksimum Fiyat", AVG(ListPrice) AS "Ortalama Fiyat" FROM Production.Product
Hocam teşekkürler güzel bir anlatım. Benim sorum biraz bunlardan farklı. Satırda 3 farklı müşteri için kesilmiş 20 farklı fatura var ve ben müşteri bazında toplamlarını görmek istiyorum. Bu döngüyü nasıl sağlarım. Yardımcı olursanız sevinirim
Kümülatif toplama yapmam gerekiyor. Tablolar aşağıdaki gibi..
Siparis CariID ye göre ve IslemTurID ye göre kümülatif toplama yapmak istiyorum.
IslemTurID
1 Urun Alındı
2 Urun Satıldı
3 Para Alındı
4 Para Verildi
Kümülatif toplama sonucunda
MusteriBorc | MusteriAlacak | BorcBakiye | AlacakBakiye şeklinde sütunlar elde etmek istiyorum.
https://www.imageupload.co.uk/image/Du01 (TABLO YAPISI)