
SQL’de Over Kullanımı
Over sorguda olmayan sıralama yada toplama fonksiyonlarını sorguda kullanımamıza yarar.
Kullanım şekli aşağıdaki gibidir.
<function_name>() OVER(PARTITION BY Category)
<function_name>() OVER(ORDER BY COUNT(*) DESC)
Toplama fonksiyonlarını Group by ifadesi ile beraber kulanarak gruplama yapılabileceğimiz gibi
PARTITION BY ifadesi kullanarak da gruplama yapabiliriz.Yalnız group by dan farkı PARTITION BY’ın
sütunsal bir şekilde gruplama yapmasıdır.
1 2 |
SELECT CustomerID, SUM(TotalDue) AS Toplam FROM Sales.SalesOrderHeader Group by CustomerID ORDER BY CustomerID; |
1 2 |
SELECT CustomerID, SUM(TotalDue) OVER(PARTITION BY CustomerID) AS Toplam FROM Sales.SalesOrderHeader ORDER BY CustomerID; |
Sorgu sonuçlarına baktığımızda aradaki farkı daha iyi anlayabiliriz.İkinci sorguda PARTITION ile sütunsal bir gruplama yapıldı.
Şimdi ise ROW_NUMBER() ifadesinin Over ile kullanım şekli için aşağıdaki sorguyu çalıştıralım
1 2 3 4 |
SELECT CategoryID, COUNT(*) AS Adet, ROW_NUMBER() OVER(ORDER BY COUNT(*) DESC) AS "Normal Sýralama", DENSE_RANK() OVER(ORDER BY COUNT(*) DESC) AS "Dense_Rank Sýralama" FROM Products GROUP BY CategoryID; |
Yukarıda Count() fonksiyonu ile ıd sayısı listelendi.ROW_NUMBER() ile normal sıralama yapıldı.
DENSE_RANK() her değişen ıd sayısı için sıralama yapıldı.
Leave a reply