본문 바로가기

Oracle

Oracle - 누적 합계를 해주는 SUM OVER

다음과 같은 데이터가 있다.(ENO는 부서 번호, SAL은 월급)

        ID        ENO NAME              SAL
---------- ---------- ---------- ----------
         1         10 홍길동1            10
         2         10 홍길동1            20
         3         20 홍길동2            30
         4         20 홍길동2            40
         5         20 홍길동2            50
         6         30 홍길동3            60
         7         30 홍길동3            10
         8         40 홍길동4            20
         9         50 홍길동5            30
        10         50 홍길동5            40

 

다음 3가지를 출력하려고 한다.

1. ID가 증가할수록 누적되는 월급 합계

2. 부서 별 ID 오름차순으로 누적되는 월급 합계

3. 전체 합계

 

ORACLE에 있는 SUM OVER 함수를 통해 다음과 같이 할 수 있다.

 

SELECT ID, ENO, NAME,SAL,
-- 1.
SUM(SAL) OVER (ORDER BY ID) AS "누적합계",
-- 2.
SUM(SAL) OVER (PARTITION BY ENO ORDER BY ID) AS "부서별 누적합계",
-- 3.
SUM(SAL) OVER () AS "전체 합계"
FROM TAB01
ORDER BY ID;

--OUTPUT
        ID        ENO NAME       SAL        누적합계  부서별 누적합계 전체 합계
---------- ---------- ---------- ---------- ---------- ---------- ----------
         1         10 홍길동1            10         10         10        310
         2         10 홍길동1            20         30         30        310
         3         20 홍길동2            30         60         30        310
         4         20 홍길동2            40        100         70        310
         5         20 홍길동2            50        150        120        310
         6         30 홍길동3            60        210         60        310
         7         30 홍길동3            10        220         70        310
         8         40 홍길동4            20        240         20        310
         9         50 홍길동5            30        270         30        310
        10         50 홍길동5            40        310         70        310