Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL RANK() срещу ROW_NUMBER()

Ще видите разликата само ако имате връзки в рамките на дял за определена стойност на поръчка.

RANK и DENSE_RANK са детерминистични в този случай, всички редове с една и съща стойност както за колоните за подреждане, така и за разделянето ще получат еднакъв резултат, докато ROW_NUMBER ще присвои произволно (недетерминистично) нарастващ резултат на свързаните редове.

Пример: (Всички редове имат един и същ StyleID така че са в същия дял и в рамките на този дял първите 3 реда са вързани, когато са подредени по ID )

WITH T(StyleID, ID)
     AS (SELECT 1,1 UNION ALL
         SELECT 1,1 UNION ALL
         SELECT 1,1 UNION ALL
         SELECT 1,2)
SELECT *,
       RANK() OVER(PARTITION BY StyleID ORDER BY ID)       AS 'RANK',
       ROW_NUMBER() OVER(PARTITION BY StyleID ORDER BY ID) AS 'ROW_NUMBER',
       DENSE_RANK() OVER(PARTITION BY StyleID ORDER BY ID) AS 'DENSE_RANK'
FROM   T  

Връща

StyleID     ID       RANK      ROW_NUMBER      DENSE_RANK
----------- -------- --------- --------------- ----------
1           1        1         1               1
1           1        1         2               1
1           1        1         3               1
1           2        4         4               2

Можете да видите, че за трите еднакви реда ROW_NUMBER нараства, RANK стойността остава същата, след което скача до 4 . DENSE_RANK също така присвоява един и същ ранг и на трите реда, но след това на следващата различна стойност се присвоява стойност 2.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Дестинация на SQL Server спрямо местоназначение на OLE DB

  2. Как да върнете Unicode стойността за даден символ в SQL Server – UNICODE()

  3. Има ли разлика между SQL Server Express (2012) и LocalDB?

  4. Как да използвате функциите на SQL Server AlwaysOn

  5. Не може да се свърже със сървъра - грешка, свързана с мрежата или специфична за екземпляр