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 |