Anasayfa / Yazılım / SQL / Toplama Fonksiyonlarının ORDER BY ve GROUP BY Deyimleri İle Birlikte Kullanımı

Toplama Fonksiyonlarının ORDER BY ve GROUP BY Deyimleri İle Birlikte Kullanımı

Toplama fonksiyonları ile birlikte ORDER BY deyimini kullanırken bazı dikkat etmemiz gereken noktalar vardır. Eğer toplama fonksiyonu olmayan bir sütunu ORDER BY ile listeleyeceksek, aynı kolonu GROUP BY kullanarak da listelememiz gerekir. Syntax yani söz dizimi olarak aşağıdaki gibidir :

SELECT Toplama Fonksiyonu(Kolon1Adı),kolon2 FROM tabloAdı GROUP BY kolon2 ORDER BY kolon2

Şimdi ORDER BY ile birlikte toplama fonksiyonunu kullanalım ve bu duruma dikkat etmediğimiz durumda ne gibi bir hata alıyoruz görelim. AdventureWorks2012 veritabanı üzerinde çalışıyorum.

SELECT CustomerID,SUM(TotalDue) AS TotalPerCustomer FROM Sales.SalesOrderHeader
GROUP BY CustomerID ORDER BY TerritoryID;

Sorgum sonucunda aşağıdaki gibi bir uyarı mesajı alırım.

Msg 8127, Level 16, State 1, Line 2
Column “Sales.SalesOrderHeader.TerritoryID” is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.

İşte bu hata ile karşılaşmamak için sorgum aşağıdaki gibi olmalıydı.

SELECT CustomerID, SUM(TotalDue) AS TotalPerCustomer FROM Sales.SalesOrderHeader
GROUP BY CustomerID ORDER BY CustomerID

Bu sefer sorgumda CustomerID kolonu için hep GROUP BY hem de ORDER BY deyimini kullandım, sonuç :

2013031401

SELECT TerritoryID, AVG(TotalDue) AS "Bölge Başına Ortalama" FROM Sales.SalesOrderHeader
GROUP BY TerritoryID ORDER BY TerritoryID

Görüldüğü üzere Sales.SalesOrderHeader tablosunda TotalDue alanının ortalamasını TerritoryID değerine göre listeledim. Tabi burada toplamsal fonksiyon kullandığım için TerritoryID için ORDER BY ve GROUP BY dedim.

2013031402

SELECT CustomerID, SUM(TotalDue) AS "Müşteri Başına Toplam" FROM Sales.SalesOrderHeader
GROUP BY CustomerID ORDER BY SUM(TotalDue) DESC

Sales.SalesOrderHeader tablosunda TotalDue kolonunun CustomerID kolonuna göre toplamlarını azalan sıra ile (TotalDue kolonuna göre azalan sıra) listeliyoruz.

2013031403

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir