web developer

[sql] RANK, DENSE_RANK, ROW_NUMBER 함수 본문

SQL/Oracle SQL

[sql] RANK, DENSE_RANK, ROW_NUMBER 함수

trueman 2022. 1. 10. 17:51
728x90
728x90

(1) RANK 함수
RANK 함수는 중복 값들에 대해서 동일한 순위로 표시하고,

중복 순위 다음 값에 대해서는 중복 개수만큼 건너뛰고, 중복순위 + 중복값 개수의 순위로 출력하는 함수입니다.

SELECT EMPNO, EMPNAME, SALARY,
RANK() OVER (ORDER BY SALARY DESC) AS RANK
FROM EMPLOYEE;
EMPNO        EMPNAME      SALARY     RANK 
----------- ------------ ---------- -------- 
494          손흥민       1000        1        
495          박지성       900         2      
493          차범근       800         3       
496          정우영       700         4       
492          황희찬       500         5      
495          이강인       500         5   
496          이승우       400         7   
493          송범근       300         8     
492          조현우       250         9

(2) DENSE_RANK

DENSE_RANK 함수는 중복 값들에 대해서 동일한 순위로 표시하고,

중복 순위 다음 값에 대해서는 중복 값 개수와 상관없이 순차적인 순위 값을 출력하도록 하는 함수 입니다.

SELECT EMPNO, EMPNAME, SALARY,
DENSE_RANK() OVER (ORDER BY SALARY DESC) AS DENSE_RANK
FROM EMPLOYEE;
EMPNO        EMPNAME      SALARY     DENSE_RANK
----------- ------------ ---------- ----------- 
494          손흥민       1000        1        
495          박지성       900         2      
493          차범근       800         3       
496          정우영       700         4       
492          황희찬       500         5      
495          이강인       500         5   
496          이승우       400         6   
493          송범근       300         7     
492          조현우       250         8

(3) ROW_NUMBER

ROW_NUMBER 함수는 중복 값들에 대해서도 순차적인 순위를 표시하도록 출력하는 함수 입니다.

SELECT EMPNO, EMPNAME, SALARY,
ROW_NUMBER() OVER (ORDER BY SALARY DESC) AS ROW_NUMBER 
FROM EMPLOYEE;
EMPNO        EMPNAME      SALARY     ROW_NUMBER 
----------- ------------ ---------- ----------- 
494          손흥민       1000        1        
495          박지성       900         2      
493          차범근       800         3       
496          정우영       700         4       
492          황희찬       500         5      
495          이강인       500         6   
496          이승우       400         7   
493          송범근       300         8     
492          조현우       250         9

RANK 함수 

- 중복되는 등수 존재 

- 중복 다음 값은 중복순위 + 중복값 개수

 

DENSE_RANK 함수 

- 중복되는 등수 존재 

- 중복 다음 값은 중복순위 + 1

 

ROW_NUMBER 함수 

중복되는 등수 없음


Window함수는 다음과 같습니다.

https://take-it-into-account.tistory.com/23

 

[SQLD] window 함수

[1] WINDOW 집계 함수 @ WINDOW 함수(컬럼명) SUM, MAX, MIN, AVG, COUNT @ 윈도우 함수 지정 범위 - 행을 분할 : PARTITION BY (GROUP BY와 같은 역할) - 행을 정렬 : ORDER BY (ORDER BY 역할) - 행을 지정 : ROWS 또는 RANGE (WHER

take-it-into-account.tistory.com


출처 : https://doorbw.tistory.com/221

728x90
728x90

'SQL > Oracle SQL' 카테고리의 다른 글

[sql/oracle] TO_DATE, TO_CHAR 비교 / 오류 원인(ORA-10858, ORA-01481)  (0) 2022.03.04
[sql] JOIN 정리  (0) 2022.01.12
[sql] DECODE 함수  (0) 2022.01.10
[sql] INSTR 함수  (0) 2022.01.07
[sql] SUBSTR 함수  (0) 2022.01.07