집 >데이터 베이스 >MySQL 튜토리얼 >SQL RANK() 및 ROW_NUMBER(): 차이점은 무엇입니까?
SQL RANK()와 ROW_NUMBER()의 차이점
SQL 순위 함수를 사용할 때 RANK()와 ROW_NUMBER()의 차이점을 이해하는 것이 중요합니다. 경우에 따라 유사해 보일 수도 있지만 중복 값을 처리할 때 다르게 동작할 수 있습니다.
ROW_NUMBER()와 RANK() 비교
ROW_NUMBER()는 정렬 열의 값이 동일한지 여부에 관계없이 각 행에 연속된 정수 값을 할당합니다. 즉, ROW_NUMBER()는 항상 각 행에 고유한 정수를 할당합니다.
반면 RANK()는 파티션 내 행의 정렬 순서에 따라 각 행에 순위를 할당합니다. 정렬 값이 동일한 행은 동일한 순위를 받습니다. 동점이 발생하면 순위에 격차가 발생합니다.
데모
다음 SQL 쿼리는 ROW_NUMBER()와 RANK()의 차이점을 보여줍니다.
<code class="language-sql">SELECT ID, [Description], RANK() OVER(PARTITION BY StyleID ORDER BY ID) as 'Rank' FROM SubStyle</code>
<code class="language-sql">SELECT ID, [Description], ROW_NUMBER() OVER(PARTITION BY StyleID ORDER BY ID) as 'RowNumber' FROM SubStyle</code>
이러한 쿼리를 사용하면 두 결과 세트가 처음에는 동일하게 보입니다. 하지만 순위가 동점이라면 그 차이는 확연해진다. 다음 예제 데이터를 고려하십시오.
<code class="language-sql">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</code>
결과:
<code>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</code>
이 예에서 ROW_NUMBER()는 동점인 경우에도 증가하는 반면, RANK()는 동점인 모든 행에 동일한 순위를 할당합니다. DENSE_RANK()는 RANK()와 유사하지만 다음의 다른 순위(2)를 다음의 다른 순위 값에 할당합니다.
위 내용은 SQL RANK() 및 ROW_NUMBER(): 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!