MS SQL Server (MSSQL)

순위 함수: ROW_NUMBER(), RANK(), DENSE_RANK(), NTILE() 비교 (예제포함)

초심으로 2024. 7. 18. 14:53

728x90

SQL Server 순위 함수: ROW_NUMBER(), RANK(), DENSE_RANK(), NTILE() 비교

SQL Server에서 제공하는 순위 함수들인 ROW_NUMBER(), RANK(), DENSE_RANK(), NTILE()은 데이터 분석과 보고서 작성에서 매우 유용합니다. 이 함수들은 데이터셋 내의 행들을 특정 기준에 따라 순서를 매기거나 순위를 할당하는 데 사용됩니다. 이 블로그 글에서는 각 함수의 특성과 사용법을 설명하고, 예제를 통해 실제 데이터에서 어떻게 적용하는지를 알아보겠습니다.

순위 함수 개요

SQL Server에서는 주로 네 가지 순위 함수를 제공합니다:

  1. ROW_NUMBER(): 각 행에 고유한 순차적 정수를 할당합니다.
  2. RANK(): 결과 집합 내에서 각 행에 순위를 할당합니다. 동일한 값이 있을 경우 순위는 같지만 갭이 있을 수 있습니다.
  3. DENSE_RANK(): RANK()와 유사하지만 동일한 순위에서 갭이 없습니다.
  4. NTILE(): 지정된 개수의 그룹 또는 버킷으로 행을 균등하게 분배합니다.

함수별 비교

함수명 설명 주요 사용 사례
ROW_NUMBER() 결과 집합에서 각 행에 고유한 연속 정수를 할당합니다. 각 행에 고유한 번호가 필요한 페이지네이션 등에 사용됩니다.
RANK() 결과 집합 내에서 각 행에 순위를 할당합니다. 동일한 값이 있을 경우 순위가 같지만 간격이 있습니다. 동일한 값들의 상대적인 순위를 알고 싶을 때 사용합니다.
DENSE_RANK() RANK()와 유사하지만 동일한 순위에서 갭이 없습니다. 순위를 간격 없이 연속적으로 할당하고자 할 때 사용됩니다.
NTILE() 지정된 개수의 그룹으로 행을 균등하게 분배합니다. 각 그룹에 번호를 할당합니다. 결과 집합을 지정된 개수의 균등한 부분으로 나눌 때 사용됩니다.

예제 사용법

각 함수가 어떻게 작동하는지를 보여주기 위해, Sales라는 테이블을 예시로 사용해 보겠습니다. 이 테이블은 다음과 같은 구조를 가지고 있습니다:

CREATE TABLE Sales (
    SalesID INT,
    EmployeeID INT,
    SalesAmount DECIMAL(10, 2)
);

INSERT INTO Sales (SalesID, EmployeeID, SalesAmount)
VALUES
(1, 101, 500.00),
(2, 102, 700.00),
(3, 103, 700.00),
(4, 104, 900.00),
(5, 105, 800.00),
(6, 106, 800.00);

ROW_NUMBER()

SELECT 
    EmployeeID,
    SalesAmount,
    ROW_NUMBER() OVER (ORDER BY SalesAmount DESC) AS RowNum
FROM Sales;

결과:

EmployeeID SalesAmount RowNum
104 900.00 1
105 800.00 2
106 800.00 3
102 700.00 4
103 700.00 5
101 500.00 6

RANK()

SELECT 
    EmployeeID,
    SalesAmount,
    RANK() OVER (ORDER BY SalesAmount DESC) AS RankNum
FROM Sales;

결과:

EmployeeID SalesAmount RankNum
104 900.00 1
105 800.00 2
106 800.00 2
102 700.00 4
103 700.00 4
101 500.00 6

DENSE_RANK()

SELECT 
    EmployeeID,
    SalesAmount,
    DENSE_RANK() OVER (ORDER BY SalesAmount DESC) AS DenseRankNum
FROM Sales;

결과:

EmployeeID SalesAmount DenseRankNum
104 900.00 1
105 800.00 2
106 800.00 2
102 700.00 3
103 700.00 3
101 500.00 4
반응형

NTILE()

SELECT 
    EmployeeID,
    SalesAmount,
    NTILE(3) OVER (ORDER BY SalesAmount DESC) AS NTileNum
FROM Sales;

결과:

EmployeeID SalesAmount NTileNum
104 900.00 1
105 800.00 1
106 800.00 2
102 700.00 2
103 700.00 3
101 500.00 3

결론

SQL Server의 순위 함수들을 이해하고 활용하면 데이터 분석 작업이 훨씬 효율적으로 수행될 수 있습니다. 각 함수가 어떤 경우에 적합한지를 이해하고, 실제 예제를 통해 적용하는 과정을 통해 더욱 실질적인 데이터 처리에 도움이 될 것입니다. ROW_NUMBER(), RANK(), DENSE_RANK(), NTILE() 함수들을 사용하여 복잡한 데이터 분석 작업을 간편하게 처리해 보세요.

반응형