오라클 월별누적합계 구하기
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 |