Son Haberler
Anasayfa / Yazılım / SQL / GROUPING SETS Deyimi

GROUPING SETS Deyimi

GROUPING SETS deyimini toplama fonksiyonu içeren bir sorgu içinde kullandığımızda bu deyimi kullanarak aslında farklı gruplandırma düzeylerini birleştirmiş oluruz. Aslında bu çoklu toplama fonskiyonu içeren sorguları UNION deyimi ile birleştirmeye benzemektedir. Örneğin bir sütun için özetlenen veriler ile birlikte bir başka farklı sütun için özetlenen verileri birleştirmek istediğimizi farzedelim. Tıpkı MERGE gibi bu deyimi çoklu veriler için kullanabiliriz. Peki neden UNION varken GROUPING SETS kullanılır? GROUPING SETS kullanmak sorgularımız için UNION kullanmaya göre daha çok performans sağlar. Özellikle sorgu içinde WHERE ile filtreleme yapıyor ve bir çok kolonu da listeliyorsak bu performansın çok çok daha fazla olduğu büyük veri tabanlarında hissedilir şekilde farkedilir. Söz dizimi olarak kullanımı aşağıdaki gibidir :

SELECT kolon1, kolon2, toplama fonksiyonu(kolon3) FROM tablo1 WHERE kriterimiz GROUP BY GROUPING SETS (kolon1, kolon2)

Şimdi aynı sorguyu hem UNION hem de GROUPING SETS kullanarak görelim. Sonuç olarak aynı sonucu alırız.

UNION Kullanarak :

SELECT NULL AS SalesOrderID, 
SUM(UnitPrice) AS ToplamFiyat, ProductID 
FROM Sales.SalesOrderDetail 
WHERE SalesOrderID BETWEEN 44150 AND 44155 
GROUP BY ProductID
UNION SELECT SalesOrderID, 
SUM(UnitPrice), NULL FROM Sales.SalesOrderDetail
WHERE SalesOrderID BETWEEN 44150 AND 44155 
GROUP BY SalesOrderID;

GROUPING SETS Kullanarak :

SELECT SalesOrderID, 
SUM(UnitPrice) AS ToplamFiyat, ProductID 
FROM Sales.SalesOrderDetail
WHERE SalesOrderID BETWEEN 44150 AND 44155 
GROUP BY GROUPING SETS(SalesOrderID, ProductID);

Sonuç aynı sonuç.

2013040203

İlk sorgu bir UNION ile oluşturulmuş sorgudur. Burada UnitPrice kolonunun toplam değerini listeliyoruz. Sorgunun ilk kısmında SalesOrderID kolonu için NULL değerler listeleniyor. Burada NULL verileri listelemek zorundayız, çünkü SalesOrderID kolonu aslında bir yer tutucudur. Diğer tarafta listelenen ProductID ve SalesOrderID için buna gerek yok. Sorgunun ikinci kısmında ise ProductID için NULL değerler listelenir. Burada da ikinci kısmında diğer tarafında ProductID ve SalesOrderID için gerekli değildir. UNION deyimi ile sorgunun ilk kısmında ve ikinci kısmında oluşan sonuçları birleştiriyoruz.

İşte yukarıda yer alan ilk sorguda yapılan işlemi çok daha basit ve performanslı bir şekilde ikinci sorguda yaptığımızı görebilirsiniz.

Bir cevap yazın

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