Group By – Gruplama : Bir fonksiyonu kullanırken bazı durumlarda GROUP BY fonksiyonu ile belli alanlara göre gruplamak gerekebilir.
Distinct : Bu ifade tablodaki belirtilen alanda bulunan kayıtlardan birer örnek alır. Yani tekrar eden kayıtlardan bir tane alır ve bunun yanına da tekrar etmeyen kayıtları koyarak bir veri kümesi oluşturur.
Having: HAVING yapısı temelde WHERE ile aynı görevi yapmaktadır. GROUP BY ile kullanılır. Where ifadesi ile belirtilen kriter Group By uygulanmadan önce geçerli olurken, Having ifadesi ile belirtilen kriter ise group by uygulandıktan sonra ortaya çıkan verileri filtrelemek için kullanılır. Ayrıca Where ifadesinden sonra sum, avg gibi fonksiyonlar kullanılamazken, Having ile kullanılabilir.

Bu konumuzu yukarıdaki tabloyu örnek alarak yapacağız.
1-select distinct Category from Product
2-select Category, count(*) as adet from Product group by Category
3-select Category, sum(Price) as toplam from Product group by Category
4-select Category, avg(Price) as ortalama from Product group by Category
5-select Category, avg(Price) as ortalama from Product where Price>3000 group by Category
6-select Category, count(*) as adet from Product group by Category having count(*)>1
1-select distinct Category from Product
1-Product tablosunun Category alanını tekrar eden kayıtlardan sadece 1 tane alarak listeme yapar.

2-select Category, count(*) as adet from Product group by Category
2-Product tablomuzun Category alanını listeledik ardından group by ile gruplama işlemi gerçekleştirdik. Son olarak count fonksiyonu yardımıyla her üründen kaç adet olduğunu yazdırdık.
Yukarıdaki distinct ile aynı işlemi yaptığımızı düşünebilirsiniz ama distinct ile beraber fonksiyonları kullanamıyoruz.

3-select Category, sum(Price) as toplam from Product group by Category
3-Product tablomuzun Category alanını listeledik ardından group by ile gruplama işlemi gerçekleştirdik. Son olarak sum fonksiyonu yardımıyla price(fiyat) alanının toplamını yazdırdık.

4-select Category, avg(Price) as ortalama from Product group by Category
4-Product tablomuzun Category alanını listeledik ardından group by ile gruplama işlemi gerçekleştirdik. Son olarak avg fonksiyonu yardımıyla price(fiyat) alanının ortalamasını yazdırdık.

5-select Category, avg(Price) as ortalama from Product where Price>3000 group by Category
5-Product tablomuzun Category alanını listeledik, ardından group by ile gruplama işlemi gerçekleştirdik. Son olarak avg fonksiyonu yardımıyla price(fiyat) alanı 3000 tl üstü olan alanların ortalamasını yazdırdık.

6-select Category, count(*) as adet from Product group by Category having count(*)>1
6-Product tablomuzun Category alanını listeledik, ardından group by ile gruplama işlemini gerçekleştirdik. Count fonksiyonu yardımıyla her bir kategori için adet hesabı yaptıktan sonra having ile adet sayısı 1’den büyük olan kategorileri listeledik.
