
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