特定の順序値のパーティション内に同点がある場合にのみ、違いがわかります。
RANK
およびDENSE_RANK
この場合、は決定論的であり、順序付け列と分割列の両方で同じ値を持つすべての行は同じ結果になりますが、ROW_NUMBER
結合された行に任意に(非決定論的に)増分結果を割り当てます。
例: (すべての行のStyleID
は同じです したがって、同じパーティション内にあり、そのパーティション内では、ID
で並べ替えると最初の3行が結び付けられます。 )
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
3つの同じ行について、ROW_NUMBER
増分、RANK
値は同じままで、4
にジャンプします 。 DENSE_RANK
また、3つの行すべてに同じランクが割り当てられますが、次の個別の値には2の値が割り当てられます。