[oracle] 윈도우 함수(Window Function)함수

재현·2024년 6월 11일
post-thumbnail

🔍 윈도우 함수

구분함수
순위 함수RANK, DENSE_RANK, ROW_NUMBER
집계 함수SUM, MAX, MIN, AVG, COUNT
순서 함수FIRST_VALUE, LAST_VALUE, LAG, LEAD
그룹 내 비율함수RATIO_TO_REPROT, PERCENT_RANK, CUME_DIST, NTILE
통계 분석함수CORR, COVAR_POP, COVAR_SAMP, STDDEV, STDDEV_POP, STDDEV_SAMP, VARIANCE, VAR_POP, VAR_SAMP

✍ 윈도우 함수 표를 보게 되면 그 동안 블로그에 작성했었던 순위함수, 집계함수, 순서함수, 비율함수, 분석함수를 볼 수 있다. over() 절의 여부에 따라 윈도우 함수로 사용하는지 아닌지 알 수 있다. 이 글에서는 앞서 봤었던 함수를 이용해서 윈도우 절을 활용하여 함수를 사용하는 방법을 알아보겠다.

🔍 윈도우 절

✍ ROWS : 조회된 데이터를 물리적 위치(ROWNUM)로 구분하여 모든 행이 1개의 행으로 인식
✍ RANGE: ORDER BY 절에 명시된 칼럼으로 논리적인 행 집합을 구성하며, 집합으로 묶인 그룹을 1개의 행으로 인식

 { ROW | RANGE }
 	{ BETWEEN {
    		UNBOUNDED PRECEDING
            | CURRENT ROW
            | value_expr { PRECEDING | FOLLOWING }
    }
    AND {
    		UNBOUNDED FOLLOWING
            | CURRENT ROW
            | value_expr { PRECEDING | FOLLOWING }
    }
  | { UNBOUNDED PRECEDING
      | CURRENT ROW
      | value_expr PRECEDING
    }
    
BETWEEN A AND B 
A) 시작점 정의
	CURRENT ROW : 현재행부터
	UNBOUNDED PRECEDING : 처음부터(DEFAULT) 
	N PRECEDING : N 이전부터
    
B) 마지막 시점 정의
	CURRENT ROW : 현재행까지(DEFAULT)
	UNBOUNDED FOLLOWING : 마지막까지  
	N FOLLOWING : N 이후까지    
 

🔍FIRST_VALUE, LAST_VALUE를 활용한 윈도우 절

SELECT EMPLOYEE_ID,
    FIRST_VALUE(SALARY) OVER (ORDER BY SALARY 
    	ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) LOWER_SAL,
    SALARY MY_SAL,
    LAST_VALUE(SALARY) OVER (ORDER BY SALARY 
    	ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) HIGHER_SAL
FROM EMPLOYEES;

SELECT DEPARTMENT_ID, FIRST_NAME, SALARY,
    SUM(salary) OVER(PARTITION BY DEPARTMENT_ID
        ORDER BY SALARY
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS sum_rows
FROM EMPLOYEES;

📖 reference

인프런 오라클 데이터베이스 강의
https://tychejin.tistory.com/209
https://for-my-wealthy-life.tistory.com/48

profile
운동과 코딩

0개의 댓글