Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 회고
- Eclipse
- 프로그래머스
- JPA
- Singleton
- study
- 자바
- 이펙티브자바
- 독서리뷰
- 매핑
- Oracle
- math
- Java
- 알고리즘
- 우아한테크코스
- 디자인패턴
- 공부
- Head First Design Pattern
- javascript
- 람다
- 인프런
- 에러
- 인코딩
- Design Pattern
- spring
- 인강리뷰
- 오라클
- 카카오톡1차
- 후기
- 독서
Archives
- Today
- Total
Lee's Grow up
[오라클/ORACLE] WINDOW FUNCTION 윈도우 함수와 WINDOWING 절 / 순위함수,집계함수, 행 순서 관련 함수 본문
DB/ORACLE
[오라클/ORACLE] WINDOW FUNCTION 윈도우 함수와 WINDOWING 절 / 순위함수,집계함수, 행 순서 관련 함수
효기로그 2019. 9. 23. 14:13반응형
WINDOW FUNCTION의 개요와 종류
- WINDOW FUNCTION : 분석함수 중에서 윈도우절을 사용하는 함수를 뜻함.
- 순위 함수 : RANK, DENSE_RANK, ROW_NUMBER ( 순위 함수란 ? )
- 집계함수 : SUM, MAX, MIN, AVG, COUNT ( 집계 함수란 ? )
- 행 순서 관련 함수 : FIRST_VALUE, LAST_VALUE, LAG, LEAD
* 관련 포스팅 내용은 위 링크를 클릭하면 이동됩니다.
WINDOW FUNCTION의 구조
1
2
3
|
SELECT WINDOW_FUNCTION ( 인수 )
OVER ( [ PARTITION BY 컬럼명 ] [ ORDER BY 절 ] [ WINDOWING 절 ] )
FROM 테이블명 ;
|
- WINDOW_FUNCTION : 함수명 ( SUN, MAX, MIN, RANK .... )
- OVER : 분석함수임을 표시 필수이다.
- PARTITION : 대상을 그룹화할 기준
- ORDER BY : 그룹에 대한 정렬 기준
- WINDOWING 절 : 분석함수의 대상이 되는 범위를 지정, ORDER BY 절에 종속적,
[ 기본 생략/DEFAULT ] 로 range between unbounded preceding and current row 실행
-> 정렬된 결과의 처음부터 현재 행 까지
WINDOWING 절의 구조
1
2
3
4
5
6
7
8
9
10
11
|
-- BETWEEN 사용시
SELECT SUM(컬럼)
OVER ( PARTITION BY 컬럼 ORDER BY 컬럼 [ ASC || DESC ]
{ ROWS || RANGE } BETWEEN UNBOUNDED PROCEDING || CURRENT ROW || VALUE_EXPR PRECEDING/FOLLOWING
AND UNBOUNDED FOLLOWING || CURRENT ROW || VALUE_EXPR PRECEDING/FOLLOWING
-- BETWEEN 미 사용시
SELECT SUM(컬럼)
OVER ( PARTITION BY 컬럼 ORDER BY 컬럼 [ ASC || DESC ]
{ ROWS || RANGE } UNBOUNDED PROCEDING || CURRENT ROW || VALUE_EXPR PROECEDING
|
WINDOWING절에서는 범위를 지정할 구분으로 [ ROWS / RANGE ] 가 사용이 가능한데
ROWS 는 물리적인 결과 행을 기준으로
RANGE 는 논리적인 범위를 지정한다. 또한 ORDER BY 절에서 사용한 컬럼 값에 대해 상수로 범위 지정이 가능
사용 예제
- 부서 별 급여 합계 조회
1
2
3
4
5
6
7
8
9
10
|
-- 급여합계를 DEPT_NO ( 부서 별 ) 로 분류를 나눠서 구함
SELECT EMP_NO, EMP_NAME, DEPT_NO, SAL,
SUM(SAL) OVER ( PARTITION BY DEPT_NO ORDER BY EMP_NO) AS TOTAL_SUM
FROM VIEW_EMPINFO;
-- 위 커리와 같은 결과 위 쿼리가 아래 BETWEEN ~~ AND ~~ 구문이 자동으로 추가 됨
SELECT EMP_NO, EMP_NAME, DEPT_NO, SAL,
SUM(SAL) OVER
( PARTITION BY DEPT_NO ORDER BY
EMP_NO RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS TOTAL_SUM
FROM VIEW_EMPINFO;
|
- 부서 별 급여 누계 조회 ( UNBOUNDED PRECENDING / FOLLOWING )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
-- ROWS를 활용한 부서 별 급여 누계
SELECT EMP_NO, EMP_NAME, DEPT_NO, SAL,
SUM(SAL) OVER
( PARTITION BY DEPT_NO
ORDER BY SAL ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW ) SUM
FROM VIEW_EMPINFO;
-- RANGE를 활용한 부서 별 급여 누계
SELECT EMP_NO, EMP_NAME, DEPT_NO, SAL,
SUM(SAL) OVER
( PARTITION BY DEPT_NO
ORDER BY SAL RANGE BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW ) SUM
FROM VIEW_EMPINFO;
|
- 부서 별 급여 누계 조회 ( VALUE_EXPR PRECEDING / FOLLOWING )
각각 전단계 1개행과 자신 행, 전 1개행과 다음 1개행 총( 최대 3개 ), 자신 행과 다음 행을 기준으로 조회
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SELECT EMP_NO, EMP_NAME, DEPT_NO, SAL,
SUM(SAL) OVER ( PARTITION BY DEPT_NO ORDER BY SAL
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW ) SUM
FROM VIEW_EMPINFO;
SELECT EMP_NO, EMP_NAME, DEPT_NO, SAL,
SUM(SAL) OVER ( PARTITION BY DEPT_NO ORDER BY SAL
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) SUM
FROM VIEW_EMPINFO;
SELECT EMP_NO, EMP_NAME, DEPT_NO, SAL,
SUM(SAL) OVER ( PARTITION BY DEPT_NO ORDER BY SAL
ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING ) SUM
FROM VIEW_EMPINFO;
|
- 부서 별 급여 합계 조회 ( RANGE를 통한 상수로 범위 지정 )
1
2
3
4
5
|
SELECT EMP_NO, EMP_NAME, DEPT_NO, SAL,
SUM(SAL) OVER
( PARTITION BY DEPT_NO
ORDER BY SAL RANGE BETWEEN 300 PRECEDING AND 100 FOLLOWING ) SUM
FROM VIEW_EMPINFO;
|
반응형
'DB > ORACLE' 카테고리의 다른 글
[오라클/Oralce] 쿼리/query 주말 및 공휴일을 제외한 날짜 구하기, 영업일 구하기 or 주말 구하기 (0) | 2019.10.14 |
---|---|
[오라클/ORACLE] 순위함수 RANK(), ROW_NUMBER(), DENSE_RANK() 분석함수 사용법 차이점 개념 (0) | 2019.09.23 |
[오라클/ORACLE] 형변환 CAST 연산자 , TO_XXXX 함수 ( TO_NUMBER, TO_DATE, TO_CHAR ) (1) | 2019.09.10 |
[오라클/ORACLE] 몬테카를로 방법(Monte Carlo method)을 통한 PI(원주율,파이) 계산 쿼리(QUERY) (1) | 2019.09.06 |
[오라클/ORACLE] NULL ( 널 ) 의 개념 / 널이란 ? NULL 이란 (0) | 2019.09.06 |
Comments