데이터 엔지니어링/SQL

[SQL] 데이터 줄세우기 RANK, DENSE_RANK, ROW_NUMBER

허니비 honeybee 2022. 11. 24. 16:20

흔히 쓰이는 ORDER BY 절을 쓸 때  ~ 기준으로 ~ 번째 데이터 가져오기 !

이런 문제가 나올때는 RANK() OVER() 절을 이용한다. 항상 Order by 와 함께 써야하며 괄호 안에 n 번째에 해당하는 숫자를 넣어주면 된다

 

1. RANK()

 

 

 

추가로 최근에 나온 다른 변형 모듈도 알아보자

 

2. DENSE_RANK(), ROW_NUMBER()

 

DENSE_RNAK 는 RANK 와 유사하게 순위를 만드는데 결과가 약간 다르다. 쓰는 방법은 완전 동일함 

 

이렇게 세 개 쿼리로 했을때의 차이점을 데이터를 보면서 알아보자. 

우선 세 개 쿼리에서 문법은 공격을 기준으로 내림차순을 정해주었다

 

 

결과

 

 

먼저 DENSE_RANK 는 공동 순위가 있어도 다음 순위를 뛰어넘지 않는다는 특징이 있다. RANK 의 경우 공동이 있으면 다음 n 개 값을 생략해버리고 그 후순위의 값을 랭크로 인식한다. 

 

ROW_NUMBER 는 공동 순서를 무시한다 

728x90