[ 참고 - 누적합 연산 범위 ]
누적합 연산 시 범위를 생략하면
range between unbounded preceding and current row 연산범위가 default이다.
즉, 처음부터 현재행까지를 연산하고 위아래 같은 값이 있다면 하나의 range로 묶어서 동시에 누적합을 계산함
** 누적합 연산 범위(서로 다른 범위)
select e.sal, e.empno,
sum(sal) over(order by sal) as 누적합1,
sum(sal) over(order by sal, empno) as 누적합2,
sum(sal) over(order by sal rows between unbounded preceding and current row) as 누적합3
from emp e;
** 누적합 연산 범위(같은 범위, 범위 전달 방법 차이)
select e.sal, e.empno,
sum(sal) over(order by sal) as 누적합1,
sum(sal) over(order by sal
range unbounded preceding) as 누적합2, -- between a and b에서 a만 남길수 있음
sum(sal) over(order by sal
range between unbounded preceding and current row) as 누적합3
from emp e;
[ 기타 윈도우 함수 ]
1. ntile : 정해진 n개 그룹으로 행을 나눌 때 사용
** 문법
ntile(n) over([partition by ...]
order by ...);
** 특징
100 행을 3개 그룹 분리 -> 34,33,33 그룹으로 분리
예제) 직원을 두 그룹으로 분리하기 위해 그룹번호 지정
select e.*,
ntile(2) over(order by hiredate) as 그룹번호
from emp e;
예제) 직원을 세 그룹으로 분리하기 위해 그룹번호 지정
select e.*,
ntile(3) over(order by hiredate) as 그룹번호
from emp e;
2. ratio_to_report : 전체중 특정 값의 비율
** 문법
ratio_to_report(대상) over([partition by ...])
예제) 각 부서별로 각 직원의 급여의 차지 비율
select e.*,
ratio_to_report(sal) over(partition by deptno) as 비율1,
sal / sum(sal) over(partition by deptno) as 비율2
from emp e;
3. cume_dist : 각 행의 위치에 대한 누적 비율
4. percent_rank : 각 행의 위치에 대한 상대 비율(0~1)
예제) cume_dist, percent_rank 차이
select empno, deptno, sal,
cume_dist() over(partition by deptno order by sal) 비율1,
percent_rank() over(partition by deptno order by sal) 비율2
from emp;
'SQL' 카테고리의 다른 글
31. PIVOT, UNPIVOT , Top n , Fetch (2) | 2024.11.07 |
---|---|
30. 계층형 질의, 그룹 함수 (0) | 2024.11.06 |
28. 윈도우함수(1) (0) | 2024.11.05 |
27. 정규식표현(2) (0) | 2024.11.05 |
26. 정규식표현(1) (1) | 2024.11.04 |