RANK ve DENSE_RANK Fonksiyonları

By | 5 Ocak 2016

sqlserver

Rank ve Danse_Rank fonksiyonları ROW_NUMBER fonksiyonu gibi gruplama işlemleri yapmaktadır.

RANK fonksiyonun ROW_NUMBER fonksiyonundan farkı gruplama işleminde sıralama yapıldığında RANK sıralamada aynı değere sahip olan değerlere aynı RANK değerini atar. ROW_NUMBER da ise sıralamada aynı olması durumda bile değer artarak devam eder. Aynı tablo üzerinde üç fonksiyonunda yazıp farklarını görelim.

Select i.ProductID,i.LocationID,i.Quantity,
ROW_NUMBER() OVER(PARTITION BY i.LocationId
ORDER BY i.Quantity DESC) As RowNumber
From Production.ProductInventory
i inner join
Production.Product p on
i.ProductID = p.ProductID
where i.ProductID in (436,461,443)

Select i.ProductID,i.LocationID,i.Quantity,
DENSE_RANK() OVER(PARTITION BY i.LocationId
ORDER BY i.Quantity DESC) As 'DENSE_RANK'
From Production.ProductInventory i
inner join
Production.Product p
on i.ProductID = p.ProductID
where i.ProductID in (436,461,443)

Select i.ProductID,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
where i.ProductID in (436,461,443)
RANK
ProductID LocationID Quantity RANK
436 1 627 1
461 1 627 1
443 1 625 3
436 6 521 1
461 6 521 1
443 6 520 3
436 50 504 1
461 50 504 1
443 50 502 3
DENSE RANK
ProductID LocationID Quantity DENSE_RANK
436 1 627 1
461 1 627 1
443 1 625 2
436 6 521 1
461 6 521 1
443 6 520 2
436 50 504 1
461 50 504 1
443 50 502 2
ROW_NUMBER
ProductID LocationID Quantity ROW_NUMBER
436 1 627 1
461 1 627 2
443 1 625 3
436 6 521 1
461 6 521 2
443 6 520 3
436 50 504 1
461 50 504 2
443 50 502 3
Category: SQL

Bir Cevap Yazın