본문 바로가기
  • BLG-ZYNGIROK-모토-꿈꾸며-배우고-나누며-이루다
ICT/SQL

SQL 문법 | 순위 함수 | RANK, DENSE_RANK, ROW_NUMBER

by dazwischen 2021. 9. 30. 15:47
반응형

SQL에서 열의 순서를 나타내는 순위 함수는 ROW_NUMBER, RANK, DENSE_RANK 가 있다. 

RANK, DENSE_RANK, ROW_NUMBER

순위 함수 rank, dense_rank, row_number 썸네일 이미지
ROW_NUMBER DENSE_RANK RANK

01 ROW_NUMBER : 위치의 순서 (1 2 3 4)

데이터 셋을 얻었을 때 같은 값이 있는지에 상관없이 눈에 보이는 그 순서 자체를 표현해 주는 함수가 ROW_NUMBER이다. 작성방식은 다음과 같다.

SELECT	COL1, ROW_NUMBER() OVER (ORDER BY COL1)
FROM	TABLE_NAME
;

EXAMPLE

SQLD 시험 응시생들의 이름과 점수를 불러오는데 높은 점수순으로 정렬하고 열의 순서를 표시해주세요.

SELECT	ROW_NUMBER() OVER (ORDER BY SCORE) AS NUMBER, NAME, SCORE
FROM	SQLD_TEST
;
NUMBER NAME SCORE
1 가나다 100
2 라마바 100
3 사아자 98
4 차카아 97

02 DENSE_RANK : 값의 순서 (1 1 2 3)

데이터 셋을 얻었을 때 값의 순서를 표현해 주는 함수는 DESSE_RANK이다. DENSE_RANK의 특징은 값의 순서를 나타내기 때문에 같은 값을 가질 경우 같은 순위를 갖는다는 점이다. 기본 쿼리는 다음과 같이 작성된다.

SELECT	COL1, DENSE_RANK() OVER (ORDER BY COL1)
FROM	TABLE_NAME
;

EXAMPLE

SQLD 시험 응시생들의 이름과 점수를 불러오는데 높은 점수순으로 정렬하고 값의 순서를 표시해 주세요.

SELECT	DENSE_RANK() OVER (ORDER BY SCORE), NAME, SCORE
FROM	SQLD_TEST
;
NUMBER NAME SCORE
1 가나다 100
1 라마바 100
2 사아자 98
3 차카아 97

 

 

 

03 RANK : 값과 위치의 순서를 동시에 = 순위 (1 1 3 4) 

마지막으로 순서를 표현하는 함수는 RANK이다. RANK는 값의 순서와 위치의 순서를 동시에 표현했다고 생각하면 된다. 같은 값이 있을 경우 같은 순위를 나타내고 그다음 값은 다음 순위 값이 아니라 위치의 순서로 표현된다. 순서와 위치 값을 표현하기 때문에 다른 것들은 순서라고 표현했지만 RANK 함수에선 순위라고 표현해줬다. 기본 쿼리는 다음과 같이 작성된다.

SELECT	COL1, RANK() OVER (ORDER BY COL1)
FROM	TABLE_NAME
;

EXAMPLE

SQLD 시험 응시생들의 이름과 점수를 불러오는데 높은 점수순으로 정렬하고 순위를 표시해 주세요.

SELECT	RANK() OVER (ORDER BY SCORE), NAME, SCORE
FROM	SQLD_TEST
;
NUMBER NAME SCORE
1 가나다 100
1 라마바 100
3 사아자 98
4 차카아 97

SUMMARY

  • ROW_NUMBER는 위치의 순서를 나타낸다. 암기할 땐 (1234)
  • DENSE_RANK는 값의 순서를 나타낸다. 암기할 땐 (1123)
  • RANK는 값과 위치의 순서를 동시에 나타내는 순위이다. 암기할 땐 (1134)

* 오타 및 잘못된 내용이 있다면 댓글로 알려주세요!

반응형

댓글