공부/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