GRUPLAMA İŞLEMLERİ(GROUP BY)
Bir veri seti içinde alt kümeler üzerinde işlemler yapmak için kullanılır. Her personelin
yaptığı toplam işlem adedi, her bölümdeki erkek öğrenci sayısı gibi verileri görüntülemek
için o veri setinde önce personellere veya bölüme göre alt grup oluşturulur sonrada o alt
küme üzerinden sayısal değerler elde edilir.
Formatı: select alan,sayısal_veri_fonksiyonu from tabloadi GROUP BY alan1
dikkat edilmesi gereken gruplandırma için kullanılacak olan alanın select komutundan
sonra mutlaka kullanılmış olmasıdır.
Sayısal veri fonksiyonları; sum(toplam), avg(ortalama), count(adet toplamı), min(en
küçük), max(en büyük) gibi fonksiyonlardır.
select KategoriID,count(*) as adet from urunler sorgusunun döndüreceği veri seti neleri
içerir
Örnek: urunler tablosunda kategorilerden kaçar tane var listesini oluşturun
select KategoriID,count(*) as adet from urunler group by KategoriID
Örnek: Satis Detayları tablosunda hangi satışta kaç adet ürün satılmıştır listesini gösterin
select SatisID,sum(miktar) as toplam from [Satis Detaylari] group by SatisID
Örnek: tablo içerisinde hangi üründen toplam kaç adet işlem yapılmış olduğunun listesi
select UrunID,sum(miktar) as toplam from [Satis Detaylari] group by UrunID order by
UrunID
Örnek: satislar tablosunda hangi personel kaç satış yapmıştır listeleyin
select personelID,count(*) from Satislar group by PersonelID
Sadece bir sütundaki verilere göre de gruplama yapılmayabilir. Bir sütuna bağlı bir başka
sütundaki verilerin sayısal değerleri hakkında veri çekmek istersek eğer bu durumda ikili
gruplama yapılması gerekir.
Örnek: Hangi Tedarikçinin hangi kategoride ne kadar ürün kaydı var
select kategoriID,TedarikciID,count(*) from urunler group by kategoriID,TedarikciID
Örnek: Hangi kategoride hangi Tedarikçinin ne kadar ürün kaydı var
select TedarikciID,kategoriID,count(*) from urunler group by TedarikciID,kategoriID
Örnek: satislar tablosunda PersonelID alanına göre ortalama nakliye ücretini gösteren
listeyi oluşturun
select personelId,avg(nakliyeUcreti) from satislar group by personelID order by
personelID
HAVING şartı: group by işlemlerinde şart sunmak için kullanılır. Having komutu da where
gibi filtrleme işlemi için kullanılır ama farkı where bir alandaki veri için kullanılırken having
sayısal bir değer için kullanılır
Örnek: Satis Detaylari tablosu içerisinde hangi üründen toplamda 250 den fazla adette
satış yapılmış olanların listesi
select UrunID,sum(miktar) as toplam from [Satis Detaylari] group by UrunID having
sum(miktar)>250 order by UrunID
Örnek: Satislar tablosundan PersonelID'si 5 ten büyük olanların işlem adet bilgilerini
gösterin
select personelID,count(*) from satislar where personelID>5 group by personelID
Örnek: Satislar tablosundan PersonelID'si 5 ten büyük olanların işlem adet bilgisi 70 den
fazla olanları gösterin
select personelID,count(*) from satislar where personelID>5 group by personelID having
count(*)>70
Örnek: aşağıdaki komut satırları yorumlayın farklılıklarını tanımlayın
select avg(miktar),sum(miktar*BirimFiyati) from [Satis Detaylari]
select kategoriId,count(*) from Urunler group by KategoriID
Örnek: Satis Detaylari tablosunda maliyeti(BirimFiyati*miktar) toplamlarının 0 dan büyük
olan ürünleri listeleyin
select UrunID,sum(BirimFiyati*miktar) from [Satis Detaylari] group by UrunID having
sum(BirimFiyati*miktar)>0 order by UrunID
Where şartı ile kullanım
Örnek: satış detayları tablosunda indirim değeri 0 dan büyük olan satışların ortalama adet
bilgilerini(miktar) bilgisini gösterin
select satisID,avg(miktar) ortalama from [Satis Detaylari] where İndirim>0 group by
SatisID
Örnek: satisId si 10260 tan küçük olanların satış miktarı 50 den büyük olanları göstersin
select satisID,sum(miktar) from [Satis Detaylari] where SatisID<10260 group by SatisID
having sum(miktar)>50
WITH ROLLUP: Group By ile gruplandırılmış veri grubunda her alt grupta elde edilen ara
toplamların gösterimi için kullanılır. Listenin sonunda genel toplam da mevcuttur.
select satisID,urunID,sum(miktar) from [Satis Detaylari] group by SatisID,UrunID with
rollup