-
[Oracle] WINDOWNING 절RDS/Oracle 2020. 9. 12. 12:33반응형
윈도우 함수 종류
- RANK, DENSE_RANK, ROW_NUMBER 함수
- SUM, MAX, MIN, AVG, COUNT 함수
- FIRST_VALUE, LAST_VALUE, LAG, LEAD 함수
- CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT 함수
윈도우 함수 문법
1234SELECT WINDOW_FUNCTION(ARGUMENTS) OVER ([PARTITION BY 컬럼][ORDER BY 절][WINDOWING 절])FROM 테이블명;cs WINDONWING 절 : 분석함수의 대상이 되는 범위를 지정하면 ORDER BY 절에 종속적입니다.
BETWEEN 사용 시
12345SELECT WINDOW_FUNCTION(ARGUMENTS) OVER ([PARTITION BY 컬럼][ORDER BY 절][[ROWS | RANGE BETWEEN [UNBOUNDED PRECEDING] | [n PRECEDING] | [CURRENT ROW]AND [UNBOUNDED FOLLOWING] | [n FOLLOWING] | [CURRENT ROW]])FROM 테이블명;cs BETWEEN 미사용 시
1234SELECT WINDOW_FUNCTION(ARGUMENTS) OVER ([PARTITION BY 컬럼][ORDER BY 절][[ROWS | RANGE [UNBOUNDED PRECEDING] | [n PRECEDING] | [CURRENT ROW]])FROM 테이블명;cs ROWS : 물리적인 ROW 단위로 행 집합을 지정합니다.
RANGE : 논리적인 상대번지로 행 집합을 지정합니다.
BETWEEN ~ AND 절 : 윈도우의 시작과 끝 위치를 지정합니다.
UNBOUNDED PRECEDING : PARTITION의 첫 번째 로우에서 윈도우가 시작합니다.
UNBOUNDED FOLLOWING : PARTITION의 마지막 로우에서 윈도우가 시작합니다.
CURRENT ROW : 윈도우의 시작이나 끝 위치가 현재 로우입니다.
[ROWS 예제]
1.부서별 급여 합계 조회
123456789SELECT EMPNO, ENAME, DEPTNO, SAL, SUM(SAL) OVER(PARTITION BY DEPTNOORDER BY EMPNOROWS BETWEEN UNBOUNDED PRECEDINGAND UNBOUNDED FOLLOWING) AS SUM_DEPTNO_SALFROM EMP;cs 2.부서별 급여 누계 조회
123456789SELECT EMPNO, ENAME, DEPTNO, SAL, SUM(SAL) OVER(PARTITION BY DEPTNOORDER BY EMPNOROWS BETWEEN UNBOUNDED PRECEDINGAND CURRENT ROW) AS SUM_DEPTNO_SALFROM EMP;cs 3.부서별 급여 누계 조회 - 전 1개 행과 현재 행
123456789SELECT EMPNO, ENAME, DEPTNO, SAL, SUM(SAL) OVER(PARTITION BY DEPTNOORDER BY EMPNOROWS BETWEEN 1 PRECEDINGAND CURRENT ROW) AS SUM_DEPTNO_SALFROM EMP;cs 4.부서별 급여 누계 조회 - 전 1개 행과 다음 1개 행
123456789SELECT EMPNO, ENAME, DEPTNO, SAL, SUM(SAL) OVER(PARTITION BY DEPTNOORDER BY EMPNOROWS BETWEEN 1 PRECEDINGAND 1 FOLLOWING) AS SUM_DEPTNO_SALFROM EMP;cs 5.부서별 급여 누계 조회 - 현재 행과 다음 1개 행
123456789SELECT EMPNO, ENAME, DEPTNO, SAL, SUM(SAL) OVER(PARTITION BY DEPTNOORDER BY EMPNOROWS BETWEEN CURRENT ROWAND 1 FOLLOWING) AS SUM_DEPTNO_SALFROM EMP;cs [RANGE 예제]
1.본인의 급여보다 50 이하로 적거나 150 이하로 많은 급여를 받는 인원수
123456789SELECT EMPNO, ENAME, SAL, SAL - 50 AS RANGE_PRECEDING_SAL, SAL + 150 AS RANGE_FOLLOWING_SAL, COUNT(*) OVER(ORDER BY SALRANGE BETWEEN 50 PRECEDINGAND 150 FOLLOWING) AS RANGE_COUNT_SALFROM EMP;cs 반응형'RDS > Oracle' 카테고리의 다른 글
[Oracle] WITH 문 (0) 2020.09.19 [Oracle] COUNT 함수 (0) 2020.09.05 [Oracle] ROW_NUMBER 함수 (0) 2020.08.30 [Oracle] ROWNUM 함수 (0) 2020.08.30 [Oracle] 윈도우 함수(Window Funtion)_그룹 내 비율 함수 (0) 2019.03.26