database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 34706 게시물 읽기
No. 34706
update 쿼리
작성자
작성일
2008-11-08 16:22
조회수
2,617

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구문에 그룹함수 지원이 안되네요




이 글에 대한 댓글이 총 2건 있습니다.

헉,, 게시글이 6개나 등록되었네요.. 내가 뭘 눌렀지??? 관리자님 게시판 버그 있습니다.

이은택(etaek74)님이 2008-11-08 16:38에 작성한 댓글입니다.

댓글이 달린 글 이외 4개의 글은 임의로 삭제하였습니다.

글남기실때 네트워크 상태가 안좋았던거 같습니다.

이창민(prosper)님이 2008-11-10 11:48에 작성한 댓글입니다.
이 댓글은 2008-11-10 11:48에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
34712NUMBER(5,2)의 데이터를 NUMBER(5,4)에 넣으려면... [1]
문화수
2008-11-09
2121
34711일대다 관계 만드는법좀 알려주세요.. [1]
바보..ㅠㅠ
2008-11-09
2782
34709update 쿼리 [1]
2008-11-08
2919
34706update 쿼리 [2]
2008-11-08
2617
34705[긴급]시작일-종료일값으로 일자_요일_주차 값 구하기 [1]
긴급정비
2008-11-08
4526
34702opensuse 11에 oracle 9i 설치좀 도와주세요ㅠ.ㅠ
lincle
2008-11-07
1846
34700drsys 스페이스가 full 됬는데 [1]
mis
2008-11-06
1859
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다