18 Aralık 2014 Perşembe

SQL Saturday 359 -4 (Write Quick, Readable and High Performance Queries Using Window Function)


4.seminer ise kitaplarından tandığımız İsmail ADAR hocanın semineriydi. Window functionları konusunda örnekler yapıldı.

Bu konuda bütün fonskiyonları yazmayacağım sadece Ranking Fonksiyonları yani derecelendirme fonksiyonları üzerine bir şeyler yazmak istiyorum.

Ranking fonksiyonları bir veri kümesi üzerinde kriter belirterek veri kümesinin gruplara bölünmesini sağlayan ve her gruba geçici bir numara veren fonksiyonlardır. SQL Server ile kullanılmaya başlayan ranking fonksiyonlarını şu şekilde listeleyebiliriz.

ROW_NUMBER:Veri kümesindeki gruplanmış her değer için numerik ve artan bir değer üretir. Bu değer istenirse tüm veri kümesi bir parça olarak alınabilir yada veriler belli kolona göre gruplanabilir.

SELECT FirstName,LastName ROW_NUMBER() OVER (ORDER BY SalesYTD
DESC
) AS 'Row Number',
SalesYTD,JobTitle

FROM
Sales.vSalesPerson
SELECT FirstName,LastName ROW_NUMBER() OVER (PARTITION BY JobTitle
ORDER
BY SalesYTD
DESC
) AS 'Row Number',
SalesYTD,JobTitle

FROM
Sales.vSalesPerson


RANK:fonksiyonuda ROW_NUMBER fonksiyonu gibi bir veri kumesi icinde
gruplama yaparak her bir veriyi belirtilen kritere gore siralama yaparak
numaralandirir. ROW_NUMBER fonksiyonundan farki ise siralama yaparken ayni degere sahip olan
satirlara ayni sira numarasi vermesidir. RANK fonksiyonunda siralama icin kullandigimiz alandaki ayni
degerler icin ayni sira numarasi kullanilir.

select i.ProductID,p.Name,i.LocationID,i.Quantity,
RANK
() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS
'
RANK'
FROM

Production.ProductInventory i
INNER JOIN Production.Product p
ON
i.ProductID=p.ProductID


DENSE_RANK fonksiyonu RANK fonksiyonundan farklı olarak aynı sıra numarası verilse bile bir sonraki gelen kayda sıra numarası verilirken araya tekrar eden kayıt sayısı kadar boşluk ekleyen fonksiyondur.

select i.ProductID,p.Name,i.LocationID,i.Quantity,
DENSE_RANK
() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS
'
RANK'
FROM

Production.ProductInventory i
INNER JOIN Production.Product p
ON
i.ProductID=p.ProductID where
i.ProductID in(
436,461,443)

 
NTILE fonksiyonu diğer ranking  yani derecelendirme fonksiyonlarından farklı olarak veri kümesini gruplarken her bir grup içinde en fazla kayıt olacağı bilgisini dışarıdan parametre olarak almaktadır.

SELECT p.FirstName, p.LastName,s.SalesYTD,a.PostalCode,
NTILE
(5) OVER(ORDER BY SalesYTD DESC) AS 'Ntile'
FROM
Sales.SalesPerson s
INNER
JOIN
Person.Person p
ON s.BusinessEntityID=P.BusinessEntityID
INNER
JOIN Person.Address a on a.AddressID=p.BusinessEntityID

Sql Server DateTime Veri Tipindeki Datayı Türkçe Formatında Göstermek

  SQL'de tarihleri farklı formatlarda göstermek için FORMAT fonksiyonunu kullanabilirsiniz. Türkçe kısa tarih formatı genellikle "...