Programming/Oracle2015. 12. 1. 16:50


오라클 월별누적합계 구하기


1월부터 5월까지의 데이터가 있는 테이블 DATA_T에서 

월별 누적합을 구한다.


데이타

1월:11

2월:12

3월:13

4월:14

5월:15


=> 누적합

1월:11

2월:23

3월:36

4월:50

5월:65



WITH절로 기준월을 만들고 데이터테이블과 조인하는 방식으로 구현하였다.

아래 쿼리는 3월,4월의 누적합을구하는 쿼리.


WITH MON_T AS ( -- 기준월

    SELECT '3' AS MON FROM DUAL UNION ALL

    SELECT '4' AS MON FROM DUAL

)

, DATA_T AS ( -- 데이터테이블

    SELECT '1' AS MON, 11 AS D_CNT FROM DUAL UNION ALL

    SELECT '2' AS MON, 12 AS D_CNT FROM DUAL UNION ALL

    SELECT '3' AS MON, 13 AS D_CNT FROM DUAL UNION ALL

    SELECT '4' AS MON, 14 AS D_CNT FROM DUAL UNION ALL

    SELECT '5' AS MON, 15 AS D_CNT FROM DUAL

)

SELECT

    M.MON

  , D.MON AS MON2

  , D.D_CNT

FROM MON_T M

   , DATA_T D

WHERE D.MON BETWEEN 1 AND M.MON

ORDER BY M.MON, D.MON


=> 결과

MON MON2 D_CNT

--------------

3    1    11

3    2    12

3    3    13

4    1    11

4    2    12

4    3    13

4    4    14


조인조건에 BETWEEN을 사용해서 1월~기준월에 해당하는 DATA를 가져온다.

조회 결과를 보면

기준월 1~3월에 해당하는 DATA 1,2,3월 

기준월 1~4월에 해당하는 DATA 1,2,3,4월

을 확인할 수 있다.


WITH(...)

SELECT

    M.MON

  , SUM(D_CNT)

FROM MON_T M

   , DATA_T D

WHERE D.MON BETWEEN 1 AND M.MON

GROUP BY M.MON

ORDER BY M.MON


=> 결과

MON SUM(D_CNT)

-------------

3     36

4     50


기준월별로 GROUP BY를 걸고 SUM을 구한다.

3월 누적합, 4월 누적합이 조회되는걸 볼수있다.



'Programming > Oracle' 카테고리의 다른 글

Oracle Table Function  (0) 2016.04.28
오라클 PIVOT UNPIVOT  (0) 2015.12.09
오라클 substr  (0) 2015.11.27
오라클 MAX KEEP  (0) 2015.11.25
오라클 락 해제, ORACLE LOCK  (0) 2015.11.03
Posted by jvvj