SQL group by Kullanımı ( Gruplama İşlemi )

SQL group by gruplama işlemini yapmak için kullanırız. Örneğin aynı üründen gelen siparişlerin toplamını veya bir müşterinin ne kadar alışveriş yaptığını analizini yapmak için kullanırız. Bu bir misal olsun diye… Bu tip işlemler yapmak için kullanırız. Eğer sorgu yazmayı ( select kullanımını ) bilmiyorsanız ilk olarak onu öğrenmenizi tavsiye ederiz.

Örnek 1:

select ProductID, sum(Quantity) as 'Adet' from [Order Details] group by ProductID

Order Details tablosundaki ProductID leri gruplayarak ProductID ve Quantity toplayarak göster.

Örnek 2:

select  sum(Quantity) from [Order Details] where ProductID = 23 

Order Details tablosundaki ProductID si 23 olanları toplamını göster.

Örnek 3:

select CustomerID, sum(Freight) as 'Toplam Kargo' from Orders group by CustomerID 

Orders tablosunda bir müşteri birden  fazla alışveriş yaptığı için CustomersID birkaç kez olacağından bunu tek olmasını istediğimizden group by ile CustomersID i grupluyoruz. Her CustomersID nin birden fazla Freight olduğu için sum etiketi ile de  onları topluyoruz. Ve ‘Toplam Kargo’ sanal ismi ile yazdırıyoruz…

Örnek 4:

select CustomerID, max(Freight) as 'En Yüksek Kargo' from Orders group by CustomerID

Bu örnekte de yukarıdaki gibi CustomersID yi grupluyoruz ve birden fazla olan kargo bedellerinden sadece en yükseğini max etiketi ile çekiyoruz.

Örnek 5:

select CustomerID, min(Freight) as 'En Düşük Kargo' from Orders group by CustomerID

Bu örnekte de yukarıdaki gibi CustomersID yi grupluyoruz ve birden fazla olan kargo bedellerinden sadece en küçüğünü min etiketi ile çekiyoruz.

Örnek 6:

select CustomerID, avg(Freight) as 'Ortalama Kargo' from Orders group by CustomerID

Bu örnekte de yukarıdaki gibi CustomersID yi grupluyoruz ve birden fazla olan kargo bedellerinin ortalama değerini avg etiketi ile çekiyoruz.

Örnek 7:

select OrderID, sum(UnitPrice*Quantity) as 'Toplam Satış Tutarı' from [Order Details] group by OrderID

Sorumuz [Order Details] her bir sipariş için toplam satış tutarını nasıl çıkarırız ? .. [Order Details] tablosunda birden fazla OrderID olduğu için  group by etiketi ile grupluyoruz. Toplam fiyatı bulmak için UnitPrice*Quantity çarpıp aynı OrderID de olanları sum etiketi ile topluyoruz. Ve istenen sütunları çekiyoruz.

Örnek 8: [Order Details] tablosunda her bir sipariş için indirim tutarını hesaplayalım?

select OrderID, sum(Discount) 'İndirim Tutarı' from [Order Details] group by OrderID

having komutu ( Group by içinde koşullu sorgu kullanımı )

having komutunu işlem yaptığımız bir şey üzerinde sorgulama yapacaksak kullanmak zorundayız. Yoksa where de kullanabiliriz.

Örnek 9:

select OrderID,  sum(Discount) 'İndirim Tutarı' from [Order Details] group by OrderID having sum(Discount) != 0

Burada OrderID leri group by etiketi ile tek e indirmiş ve sum etiketi ile indirim tutarlarını (Discount) toplamış ve indirim olmayanlar hariç çekmişiz. Sorgulama işlemini having ile yapmışız. Where ile yapamazdık. Çünkü sum(discount) ile işlem yaptığımız için işlem yaptığımız değeri sorgulama yapacak isek having kullanmak zorundayız.

Örnek 10:

select ProductID, sum(UnitPrice*Quantity) from [Order Details] where UnitPrice <= 5 group by ProductID 

Burada [Order Details] tablosundaki ProductID ile birim fiyatı 5 ve altında olanları çekiyoruz. Birden fazla ProductID olduğu için sql group by etiketi ile tek e düşürüyoruz. Dikkat edilirse burada group by kullanırken sorgulama da where kullandık. Çünkü işlem yaptığımız değeri sorguya sokmadık. Onun için hata vermeden çalışır..

Örnek 11:

select  ShipCountry , count(*) 'Sipariş Sayısı' from Orders group by ShipCountry having count(*) < 30 

Orders tablosunda ülkelere siparişleri hesaplama için. count komutu sayma için kullanılır.. burada 30 un altındaki ülkeleri çeker…

Başka bir yazımızda görüşmek üzere…

Leave a Reply