create table AAA (
yyyymm varchar2(6) not null
, new_cust_cnt number null
, leave_cust_cnt number null
, acc_cust_cnt number null
)
AAA테이블은 월별 신규고객수와 탈퇴고객수 그리고 누적고객수입니다.
--------------------------------------------------------------
yyyymm new_cust_cnt leave_cust_cnt acc_cust_cnt
-------- ------------- -------------- -------------
200810 13 2 92
200809 12 1 81
...
...
200801 10 2 8
--------------------------------------------------------------
2008년 9월 부터 11월 까지의 데이터만 select 해서 AAA테이블 갱신하려 합니다.
MERGE INTO구문으로
yyyymm,
new_cust_cnt,
leave_cust_cnt 값을 넣고
UPDATE구문으로
acc_cust_cnt --> 누적고객수
값을 갱신 합니다.
누적고객수 컬럼만을 update구문으로 따로 분리한것은
전체 누적고객수를 위해서입니다.
-----------------------------------------------
BEGIN
MERGE INTO AAA a
USING (
SELECT
yyyymm
, SUM(aa) as n_cust_cnt
, SUM(bb) as l_cust_cnt
FROM BBB
GROUP BY yyyymm) b
ON a.yyyymm = b.yyyymm
WHEN MATCHED THEN
UPDATE SET
a.new_cust_cnt = b.n_cust_cnt
, a.leave_cust_cnt = b.l_cust_cnt
WHEN NOT MATCHED THEN
INSERT VALUES (
b.yyyymm
, b.n_cust_cnt
, b.l_cust_cnt
);
UPDATE AAA
SET acc_cust_cnt = SUM(new_cust_cnt - leave_cust_cnt)
over(partition by yyyymm order by yyyymm)
;
END;
------------------------------------------------------
merge into 구문 실행후 퍼포먼스를 고려한 update의 방법 문의드립니다.
위 쿼리문 처럼 생각했지만 update구문에 그룹함수 지원이 안되네요
|