WINDOW FUNCTION
- 행과 행 사이의 관계를 쉽게 정의할 수 있다.
- 다른 함수와는 달리 중첩하여 사용할 수 없다.(단, 서브쿼리에는 사용 가능)
- OVER 문이 필수로 사용된다. (쓸거 없으면 OVER() 이라도 써야한다.)
키워드 |
설명 |
ROWS |
물리적으로 행을 지정할 것임을 명시 |
RANGE |
논리적으로 행을 지정할 것임을 명시 |
BETWEEN ~ AND ~ |
windowing 범위 지정 |
UNBOUNDED PRECEDING |
첫 번째 행 --> endpoint에는 사용 불가 |
UNBOUNDED FOLLOWING |
마지막 행 |
CURRENT ROW |
현재 행 |
ex) ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
-> 물리적으로 행을 지정할 것이며, 범위는 첫 번째 행부터 맨 마지막 행 까지다.
WINDOW FUNCTION 종류
- 집계 함수 : SUM, MAX, MIN, AVG 등
- 순위 관련 함수 : RANK, DENSE_RANK, ROW_NUMBER
- 행 순서 관련 함수 : FIRST_VALUE, LAST_VALUE, LAG, LEAD
- 비율 관련 함수 : CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT
- 통계 분석 함수 : (생략)
- SUM, AVG, COUNT, MAX, MIN
2. 순위 관련 함수
- 랭킹을 계산
- 동순위는 동일한 값을 부여 ex) 1등 두명이면 둘다 1등된다. 2등 없이 다음은 3등이다.
- 랭킹을 계산
- 동순위는 하나의 건수로 처리 ex) 1등 두명이면 둘다 1등된다. 다음은 2등이다.
- 랭킹을 계산
- 동순위에 대해 고유한 값을 부여 ex) 1등 두명이면 그냥 한명은 2등 처리한다.
FROM EMP;
3. 행 순서 관련 함수
1.1 FIRST_VALUE : 첫 행의 값을 가져온다.
SELECT DEPTNO, ENAME, SAL,
FIRST_VALUE(ENAME) OVER (PARTITION BY DEPTNO
ORDER BY SAL DESC
ROWS UNBOUNDED PRECEDING) AS DEPT_A
FROM EMP;
1.2 LAST_VALUE : 마지막 행의 값을 가져온다.
SELECT DEPTNO, ENAME, SAL,
LAST_VALUE(ENAME) OVER (PARTITION BY DEPTNO
ORDER BY SAL DESC
ROWS UNBOUNDED PRECEDING) AS DEPT_A
FROM EMP;
1.3 LAG : 이전 행의 값을 가져온다.
SELECT DEPTNO, ENAME, SAL,
LAG(SAL) OVER (ORDER BY SAL DESC) AS PRE_SAL //이천 행의 SAL 필드 값을 가져온다.
FROM EMP;
1.4 LEAD : 이후 N번째 행의 값을 가져온다.
- 가져올 행 번호의 기본 값은 1이다.
SELECT DEPTNO, ENAME, SAL,
LEAD(SAL,2) OVER (ORDER BY SAL DESC) AS PRE_SAL //SAL에서 두번재 행의 값을 가져온다.
FROM EMP;
4. 비율 관련 함수
1.1 RATIO_TO_REPORT
- 각 칼럼 값의 백분율을 소수점으로 구할 수 있다. (전체 합은 1)
1.2 RATIO_TO_REPORT
- 등수를 백분율로 구한다. (전체 합은 1)
1.3 NTILE
- 조회된 내용을 N등분한다.
'dev > DB' 카테고리의 다른 글
엔터티, 속성, 식별자의 분류 (0) | 2019.03.11 |
---|---|
SQL 최적화(옵티마이저, 인덱스) (0) | 2019.03.10 |
그룹 함수 (0) | 2019.03.10 |
SQL 표준 함수 (0) | 2019.03.10 |
서브쿼리 (0) | 2019.03.10 |