728x90
SQL Server 순위 함수: ROW_NUMBER(), RANK(), DENSE_RANK(), NTILE() 비교
SQL Server에서 제공하는 순위 함수들인 ROW_NUMBER()
, RANK()
, DENSE_RANK()
, NTILE()
은 데이터 분석과 보고서 작성에서 매우 유용합니다. 이 함수들은 데이터셋 내의 행들을 특정 기준에 따라 순서를 매기거나 순위를 할당하는 데 사용됩니다. 이 블로그 글에서는 각 함수의 특성과 사용법을 설명하고, 예제를 통해 실제 데이터에서 어떻게 적용하는지를 알아보겠습니다.
순위 함수 개요
SQL Server에서는 주로 네 가지 순위 함수를 제공합니다:
- ROW_NUMBER(): 각 행에 고유한 순차적 정수를 할당합니다.
- RANK(): 결과 집합 내에서 각 행에 순위를 할당합니다. 동일한 값이 있을 경우 순위는 같지만 갭이 있을 수 있습니다.
- DENSE_RANK():
RANK()
와 유사하지만 동일한 순위에서 갭이 없습니다. - 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()
함수들을 사용하여 복잡한 데이터 분석 작업을 간편하게 처리해 보세요.
반응형
'MS SQL Server (MSSQL)' 카테고리의 다른 글
SQL Server 날짜 시간 저장 방법 총정리 (+예시 포함) (85) | 2024.07.25 |
---|---|
SQL Server 'LIKE' 키워드 기능 5가지 (1) | 2024.07.19 |
SQL Server에서 Cross Join 이해하기 (1) | 2024.07.17 |
OLE DB와 ODBC 비교 (예제 포함) (0) | 2024.07.15 |
재귀 쿼리로 조직 구조 조회하기 (WITH 사용, Recursive Query) (0) | 2024.07.12 |