>데이터 베이스 >MySQL 튜토리얼 >SQL RANK() 및 ROW_NUMBER(): 차이점은 무엇입니까?

SQL RANK() 및 ROW_NUMBER(): 차이점은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-13 16:52:44599검색

SQL RANK() vs. ROW_NUMBER(): What's the Difference?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.