Anasayfa / Yazılım / SQL / CUBE ve ROLLUP Deyimleri

CUBE ve ROLLUP Deyimleri

Toplama fonksiyonu içeren sorgularımızda alt toplamalar oluşturabilmek için GROUP BY deyimi ile birlikte CUBE ve ROLLUP deyimlerini kullanabiliriz. CUBE ve ROLLUP birbirine çok benzemekle birlikte aralarında çok ince bir fark vardır. CUBE ile gruplandırılmış her seviyedeki birleşim için alt toplam oluşturabiliriz. ROLLUP ise hiyerarşinin tamamı için alt toplam oluşturabilir. Örneğin 3 tane sütunu gruplandırdığımızı düşünelim. CUBE ile her kolon için alt toplam oluşturabiliriz ancak ROLLUP ile sadece ilk iki kolon için alt toplam oluşturabiliriz, son sütun GROUP BY deyiminde kalır.

Söz dizimi olarak kullanımı şöyledir :

SELECT kolon1, kolon2, toplama fonksiyonu FROM tablo GROUP BY CUBE veya ROLLUP(kolon1, kolon2)

CUBE ve ROLLUP kullanımı için örnek yapalım. AdventureWorks2012 veri tabanı üzerinde sorgumu oluşturuyorum.

Önce CUBE ile sorgumu oluşturuyorum.

SELECT COUNT(*) AS SatirSayisi, Color, 
ISNULL(Size,CASE WHEN GROUPING(Size) = 0 THEN 'UNK' ELSE 'ALL' END) AS Boyut
FROM Production.Product GROUP BY CUBE(Color,Size) ORDER BY Boyut;

2013040204

Sonra ROLLUP ile sorgumu oluşturuyorum.

SELECT COUNT(*) AS SatirSayisi, Color,
ISNULL(Size,CASE WHEN GROUPING(Size) = 0 THEN 'UNK' ELSE 'ALL' END) AS Boyut
FROM Production.Product GROUP BY ROLLUP(Color,Size) ORDER BY Boyut;

2013040205

Üstteki sonuç ekran görüntülerinden görüleceği üzere birinci sorgum sonudunca 98 satır veri dönerken, ikinci sorgum sonunda 79 satır veri dönüyor. Sonuç ekranında görüleceği üzere örneğin Boyut kolonu altında yer alan 38 değeri için tüm verilerin dönmediğini sorgu 2 sonucunda görebilirsiniz. Yani ikinci sorgum sonucunda her renk yani her color sütunu için alt toplam değeri dönerken, boyut kolonu için dönmüyor. Sorgu birde ise her renk ve her boyut için bir geri dönüş var, bu fark buradan kaynaklanıyor.

Ayrıca bu örnekte renk (color) alanındaki kırmızı yani red için Boyut kolonu içinde NULL veriler mevcut. NULL verileri ayırmak için GORUPING fonksiyonu kullanılabilir.

Bir cevap yazın

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