본문 바로가기

Database/MSSQL

ROW_NUMBER()를 이용한 그룹단위 번호부여 및 정렬

DECLARE @TEST TABLE (

   NAME VARCHAR(10),

   GENDER VARCHAR(5),

   GRADE CHAR(1)

)


INSERT INTO @TEST VALUES('PITT', 'MAN', 'A')

INSERT INTO @TEST VALUES('JOLIE', 'WOMAN', 'A')

INSERT INTO @TEST VALUES('KATE', 'WOMAN', 'A')

INSERT INTO @TEST VALUES('BECKAM', 'MAN', 'B')


SELECT * FROM @TEST

NAME 

 GENDER

 GRADE

PITT 

MAN 

JOLIE

WOMAN

KATE

WOMAN

BECKAM

MAN


SELECT *, ROW_NUMBER() OVER (PARTITION BY GENDER ORDER BY GRADE) AS ROWNUM

 NAME

GENDER 

GRADE 

ROWNUM 

 PITT

MAN 

 BECKAM

MAN 

 JOLIE

WOMAN 

 KATE

WOMAN 



ROW_NUMBER 라는 것은 SQL SERVER 에서 제공해주는 내장함수(순위함수라고 합니다.) 같은 녀석입니다.

이후 OVER 절을 이용하여 어떻게 순위를 정의할지 결정하게 됩니다.

OVER 절 내에는 ORDER BY 절이 따라와야 하며 여기에 정의되는 ORDER BY 절에 따라서 값이 정해집니다.

위에 보시면 ROWNUM 이라는 컬럼이 추가된걸 알 수 있는데 이는 SELECT 문을 참고하여 이해하실 수 있을 것입니다.


위 SELECT 문에는 PARTITION BY 절을 이용해서 그룹처럼 ROW들의 정렬을 GENDER 값에 따라 묶어주었고,

여기서 ORDER BY 절로 GRADE 값에 따라서 정렬해준 것을 알 수 있습니다.


참고하시어 즐거운 플그래밍 되셔요. :)