Ranking 함수의 종류
RANK()
DENSE_RANK()
NTILE(<expression>)
ROW_NUMBER()
집계 작업에 사용 가능
사용자 정의 함수와 함께 사용 가능
함수 설명
RANK-- 결과 집합의 각 행에 대하여 지정된 파티션 내에서 정렬 기준에 의거하여 등급을 부여하는 함수
DENSE_RANK-- 결과 집합의 각 행에 대하여 지정된 파티션 내에서 정렬 기준에 의거하여 연속적인 등급을 반환하는 함수
ROW_NUMBER --결과 집합의 각 행에 대하여 행의 위치 번호를 반환하는 함수
NTILE (n) --결과 집합의 각 파티션에 있는 행들을 지정한 개수만큼의 그룹으로 쪼개어 등급을 부여하는 함수
Ranking 함수 예: 데이터 분석
예:
SELECT
RANK() OVER(ORDER BY City) AS RANK,
RANK() OVER(PARTITION BY City ORDER BY LastName) AS PART_RANK,
DENSE_RANK() OVER(ORDER BY City) AS DENSE_RANK,
ROW_NUMBER() OVER(ORDER BY City) AS ROW_NUM,
NTILE(4) OVER(ORDER BY City) AS NTILE_4,
LastName,
FirstName,
City
FROM Employees
ORDER BY City, LastName
OVER 절:
파티션 방식 제공
결과 집합의 행들을 정렬
RANK PART_RANK DENSE_RANK ROW_NUMBER NTILE_4
1 1 1 1 1 Leverling Janet Kirkland
2 1 2 2 1 Buchanan Steven London
2 2 2 5 2 Dodsworth Anne London
2 3 2 4 2 King Robert London
2 4 2 3 1 Suyama Michael London
6 1 3 6 3 Peacock Margaret Redmond
7 1 4 8 4 Callahan Laura Seattle
7 2 4 7 3 Davolio Nancy Seattle
9 1 5 9 4 Fuller Andrew Tacoma
Ranking 함수 예:페이징
예: 50에서 60까지의 주문 정보를 일자순으로 정렬
WITH OrderedOrders AS
(select SalesOrderID,
OrderDate,
Row_Number() OVER (order by OrderDate) AS RN
from SalesOrderHeader)
SELECT * from OrderedOrders
WHERE RN between 50 and 60
