본문 바로가기

Oracle/SQL

SQL 데이터 분석함수 - 누적데이터 Sum () over ()

SUM OVER (누적데이터)

sum(sal) over ()
from emp

→ over 다음( 괄호)에 아무것도 넣지않으면 누적되지않은 총값만 나오게 된다.

누적 되는식으로 데이터가 나타나려면 order by 절에

select ename, sal, 
       sum(sal) over( order bY sal asc rows
                      between unbounded preceding 
                      and current row) 누적치
from emp
where job in ('ANALYST', 'MANAGER')

unbounded preceding : 제일 첫번째 행

unbounded following : 맨 마지막 행

current row : 현재 행

문제 219 : 부서번호, 이름, 월급, 월급의 누적치가 출력 되게하고 월급의 누적치가 부서번호별로 각각 월급의 누적치가 출력 되게 하시오

select deptno, ename, sal, sum(sal) over (partition by deptno
                                          order by sal asc rows 
                                          between unbounded preceding 
                                          and current row) 누적치 
from emp;

→ deptno 를 partition 해서 부서번호별로 뽑고 그다음에 sal 이 asc 하게.

 

sum 과 sum over 의 차이?

문제 : 사원테이블의 토탈월급

select sum(sal) 
from emp;

문제 : 이름, 월급, 토탈월급을 출력?

select ename, sal, sum(sal)
from emp;

→ 에러남... 이유는 ?

sum 그룹함수인 토탈월급은 하나만 나와야하는데 , 이름과, 월급은 여러개가 나오려 하기때문에

맞는식은?

select ename, sal, sum(sal) over () as 토탈월급 
from emp

→ 원래 over 다음 괄호에 누적치를 구하는 식을 써야하는데, 쓰지 않게되면 그냥 월급 전체를 더한 값들이 모두 나오게 된다.

→ 이렇게 되면 이름과 월급이 잘 출력되고 그옆에 토탈월급이 그 수 (이름과 월급이 출력 된 행 )만큼 여러개가 연달아서 출력된다.