STUDY/IT

ORACLE Window function 함수 (rank, dense_rank, row_number...)

Json웅 2021. 5. 24. 16:35

Oracle에서는 다른 DBMS와 같이 Window Function이 있음(분석 함수라고도 불림)

Inline view를 이용해 작성해야 하는 행간 비교, 연산등이 해당 함수로 편하게 구현 가능함.

 

1. RANK

- 특정 칼럼에 대한 순위를 구하는 함수. PARTITION 을 사용하여 특정 범위 내에 순위를 구할 수 있음

SELECT JOB, 
       ENAME, 
       RANK() OVER (ORDER BY SAL DESC) ALL_RANK,              -- 전체 EMP에 대한 연봉 순위
       RANK() OVER (PARTITION BY JOB ODER BY SAL DESC) JOB_RANK -- 각 JOB별 EMP에 대한 연봉 순위
  FROM EMP;  

 

2. DENSE_RANK

- RANK와 다르게 동일 등수를 하나의 등수로 취급

  ex) RANK : 1 - 2 - 2 - 4 ... 

       DENSE_RANK : 1 - 2 - 2 - 3 ...

SELECT JOB, 
       ENAME, 
       RANK() OVER (ORDER BY SAL DESC) ALL_RANK,              
       DENSE_RANK() OVER (ORDER BY SAL DESC) DENSE_RANK       
  FROM EMP;  

 

3. ROW_NUMBER

- 중복 관계 없이 순차적으로 숫자를 매김. 

SELECT JOB, 
       ENAME, 
       ROW_NUMBER() OVER (ORDER BY SAL DESC) ROW_NUM
  FROM EMP;  

 

 

4. SUM, AVG

- PARTITION을 사용하여 각 PARTITION별 합계/평균를 구함. 

SELECT MGR,
       ENAME,
       SAL,
       SUM(SAL) OVER (PARTITION BY MGR) MGR_SUM,
       AVG(SAL) OVER (PARTITION BY MGR) MGR_AVG
  FROM EMP;   

- MGR_SUM, MGR_AVG : 동일 상급자를 두고 있는 사원의 SAL 합계를 보여줌

 

5. MIN, MAX

- PARTITION을 사용하여 각 PARTITION별 최소값/최대값를 구함. 

SELECT MGR,
       ENAME,
       SAL,
       MIN(SAL) OVER (PARTITION BY MGR) MGR_MIN,
       MAX(SAL) OVER (PARTITION BY MGR) MGR_MAX
  FROM EMP;   

- MGR_MIN, MGR_MAX : 동일 상급자를 두고 있는 사원의 SAL 최소값, 최대값을 보여줌

 

 

반응형