people

GROUP BY

DISTINCT anahtar kelimesi yanlızca benzersiz satırları listelemek için kullanılırken, GROUP BY yantümcesi belirtilen sütun yada sütunlardaki aynı değere sahip satırları tek bir satırda birleştirmeyi sağlar.

GROUP BY genellikle toplam fonksiyonlarıyla (Aggregate Function) kullanılır. GROUP BY sorgularında kullanılan en yaygın toplama işlevleri MIN, MAX, SUM ve COUNT'dır.

GROUP BY ile belirtilen sütunlar SELECT ifadesinde de yeralmalıdır.

Örnek: Aşağıda Sipariş Detayları(Order Details) tablosu productid alanına göre gruplandırılmış ve her grubun toplam sipariş miktarı hesaplanmıştır.

Sorgu:

USE northwind

SELECT productid,

SUM(quantity) AS 'Total'

FROM [order details]

GROUP BY productid

ORDER BY productid

GO


Örnek: Aşağıdaki örnekte sadece ürünkodu 2 olan kayıtların toplam miktarı hesaplanmıştır.

Sorgu:

USE northwind

SELECT productid,

SUM(quantity) AS 'Total'

FROM [order details] WHERE productid=2

GROUP BY productid

ORDER BY productid

GO


HAVING YANTÜMCESİ

Toplam fonksiyonlarını kullanırken kısıt girilmesi gerektiğinde WHERE yantümcesini kullanamayız. HAVING yantümcesi, GROUP BY ile elde edilecek satırları kısıtlamak için kullanılır. İşlev olarak WHERE yantümcesi gibi çalışır fakat WHERE yantümcesi gruplama işlemlerinden önce, HAVING yantümcesi ise GROUP BY'dan sonra uygulanır.

Örnek: Bu sorguda toplam sipariş miktarı 1200 adetten fazla olan ürünkodları listelenmiştir.

Sorgu:

USE northwind

SELECT productid, SUM(quantity) AS total_quantity

FROM [order details]

GROUP BY productid

HAVING SUM(quantity) > 1200

GO


Örnek: Siparişler (Orders) tablosunu EmployeeID alanına göre gruplandırılmış ve CustomerID alanı her grup için sayılmıştır. Bu şekilde her çalışanımın toplam kaç sipariş aldığını görebilirim. Burada saydırılacak alan CustomerID’ den farkılı bir alan da olabilirdi.

Sorgu:

USE northwind

SELECT EmployeeID, COUNT(CustomerID)

FROM orders

GROUP BY EmployeeID

HAVING COUNT(CustomerID)>120

ORDER BY EmployeeID


GROUP BY İLE ÖZETLGİ

GROUP BY ile bir toplama işlevi kullandığımızda her farklı değer için sadece sonuç satırı görüntülenir. Gruplandırdığımız değerlerin detaylarını farklı yantümceler kullanarak görüntüleyebiliriz.

ROLLUP

Grup değerlerini özetlemek için kullanılır.

Örnek:

Sorgu:

USE northwind

SELECT orderid, productid, SUM(quantity) AS total_quantity

FROM [order details]

WHERE orderid <>

GROUP BY orderid, productid

WITH ROLLUP

ORDER BY orderid, productid

GO


CUBE

GROUP BY ile belirtilen sütunların tüm olası eşleşmelerini özetler

Örnek: Aşağıdaki örnekte sipariş kodu 10250’den küçük olan kayıtların ve ürünlerin detaylı toplamları listelenmiştir.

Sorgu:

SELECT orderid, productid,

SUM(quantity) AS total_quantity

FROM [order details] WHERE OrderID <>

GROUP BY OrderID, productid WITH CUBE

ORDER BY OrderID, productid


GROUPING FONKSİYONU

ROLL UP ve CUBE ile elde edilen sonuç kümesini görsel olarak daha kolay yorumlayabilmemizi sağlar. GROUPING ile belirtilen her sütun için yeni bir sütun oluşturulur. Bu sütunlarda özet bilgiler için 1, detay bilgiler için 0 değeri görüntülenir.

Örnek: Yukarıdaki alıştırmadan farklı olarak fazladan eklenmiş sütunlara dikkat edin. OrderID alanı NULL olarak görünen kayıtlar tüm siparişlerdeki ürünlerin toplamlarını göstermektedir.

Sorgu:

USE northwind

SELECT orderid, GROUPING(orderid), productid

,GROUPING(productid), SUM(quantity) AS total_quantity

FROM [order details] WHERE orderid <>

GROUP BY orderid, productid

WITH CUBE

ORDER BY orderid, productid


0 yorum:

Yorum Gönder