Numeracja wierszy w SQL Server – DENSE_RANK

W poprzednim poście zajęliśmy się funkcją RANK. Dla przypomnienia umożliwia ona numerację wierszy z rozróżnieniem wartości.  Dla dokładnego opisu odsyłam tutaj. Jedną z cech RANK jest fakt, że w przypadku remisów (takich samych wartości) licznik wewnętrzny jest zwiększany, czego rezultatem są przerwy w numeracji. W przypadku DENSE_RANK opisane przerwy nie istnieją. Rozważmy poniższe zapytanie:

select DENSE_RANK() over(order BY ProductSubCategoryID),ProductSubcategoryID from Production.Product;

Możliwy wynik to:

 

DENSE_RANK ProductSubCategoryId
1 5
1 5
1 5
2 6
2 6
2 6

W przypadku RANK byłoby to:

RANK ProductSubCategoryId
1 5
1 5
1 5
4 6
4 6
4 6

 

Funkcję różnią się wyłącznie obsługa tzw. remisów. DENSE_RANK nie powoduje przerw w numeracji, z kolei w przypadku RANK takowe przerwy powstają.

Leave a Reply

Your email address will not be published.