공부/MSSQL
MSSQL ROW_NUMBER()정리
da_won_2023
2023. 8. 17. 23:53
SMALL
MSSQL ROW_NUMBER 함수
ROW_NUMBER 즉, 행 번호를 매기기 위한 함수이다.
MSSQL에 있는 API DOC 문서를 보면
존재하지 않는 이미지입니다.
이렇게 나와 있다.
PARTITION BY는 구역을 정해주는 것이다.
GROUP BY와 비슷하다고 보면 될 것 같다.
서브쿼리에는 ORDER BY를 사용할 수 없는데 이럴 때도 ROW_NUMBER를 이용한다.
예제를 가져와 보았다.
데이터는 밑의 예제 데이터로 채워두었다.
예제 데이터
DECLARE @TEMP TABLE (
NAME NVARCHAR(50),
OCCUPATION NVARCHAR(50)
)
INSERT INTO @TEMP
SELECT 'Ashley' , 'Professor'
UNION ALL
SELECT 'Samantha' , 'Actor'
UNION ALL
SELECT 'Julia' , 'Doctor'
UNION ALL
SELECT 'Britney' , 'Professor'
UNION ALL
SELECT 'Maria' , 'Professor'
UNION ALL
SELECT 'Meera' , 'Professor'
UNION ALL
SELECT 'Priya' , 'Doctor'
UNION ALL
SELECT 'Priyanka' , 'Professor'
UNION ALL
SELECT 'Jennifer' , 'Actor'
UNION ALL
SELECT 'Ketty' , 'Actor'
UNION ALL
SELECT 'Belvet' , 'Professor'
UNION ALL
SELECT 'Naomi' , 'Professor'
UNION ALL
SELECT 'Jane' , 'Singer'
UNION ALL
SELECT 'Jenny' , 'Singer'
UNION ALL
SELECT 'Kristeen' , 'Singer'
UNION ALL
SELECT 'Christeen' , 'Singer'
UNION ALL
SELECT 'Eve' , 'Actor'
UNION ALL
SELECT 'Aamina' , 'Doctor'
- OCCUPATION을 기준으로 행 번호를 매긴 후 NAME으로 정렬한다.
위의 기준으로 ROW_NUMBER함수를 사용해 보자면
밑의 예제 결과처럼 나온다.
예제 결과
NAME
|
OCCUPATION
|
ROWNUM
|
Eve
|
Actor
|
1
|
Jennifer
|
Actor
|
2
|
Ketty
|
Actor
|
3
|
Samantha
|
Actor
|
4
|
Aamina
|
Doctor
|
1
|
Julia
|
Doctor
|
2
|
Priya
|
Doctor
|
3
|
Ashley
|
Professor
|
1
|
Belvet
|
Professor
|
2
|
Britney
|
Professor
|
3
|
Maria
|
Professor
|
4
|
Meera
|
Professor
|
5
|
Naomi
|
Professor
|
6
|
Priyanka
|
Professor
|
7
|
Christeen
|
Singer
|
1
|
Jane
|
Singer
|
2
|
Jenny
|
Singer
|
3
|
Kristeen
|
Singer
|
4
|
OCCUPATION을 기준으로 하였으니 PARTITION BY 뒤에 OCCUPATION을 적어주고
NAME으로 정렬해야 하니 ORDER BY 뒤에는 NAME을 적어준다.
실행 쿼리는 다음과 같다.
SELECT
NAME
, OCCUPATION
, ROW_NUMBER() OVER(PARTITION BY OCCUPATION ORDER BY NAME) ROWNUM
FROM @TEMP
데이터는 해커랭크를 참조하였다.
해커 랭크 답안
LIST