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
운영게시판
최근게시물
DB2 Q&A 1438 게시물 읽기
No. 1438
한번의 데이블 액세스로 합계와...
작성자
나도초보인가
작성일
2007-09-23 02:38
조회수
9,425

수고하십니다. 조언을 얻고자 질문 올립니다.


test테이블로부터 관리점, 고객별로 가장 최근 월의 데이터를 추출해서

aaa 테이블로 insert를 하고자 합니다.


전체 고객을 대상으로 하니까 full scan을 해야 하는데,

아래와 같은 sql은 합계와 최근 월을 구하기 위해

동일한 테이블을 두 번이나 full scan하게 됩니다.


insert into aaa

select m.brno, m.custno, m.recym,

         round(m.sum1/1000, 0), round(m.sum2/1000, 0),

         round(m.sum3/1000, 0), round(m.sum4/1000, 0),

         round((m.sum1 + m.sum2 + m.sum3 + m.sum4) / 1000, 0),

         s2.....(생략)

  from (select brno, custno, recym,

                    sum(rent1) sum1, sum(rent2) sum2,

                    sum(rent3) sum3, sum(rent4) sum4

             from test

          group by brno, custno, recym

         ) m        .............................................................(1)

         join

         (select brno, custno, max(recym) recym

             from test

           group by brno, custno

         ) s1        .............................................................(2)

         on m.brno    = s1.brno

       and m.custno = s1.custno

       and m.recym  = s1.recym

       left outer join

       ...(이하 생략)


예를 들어, test테이블의 데이터는 아래와 같습니다.


brno    custno       recym   kbn   rent1     rent2      rent3      rent4

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

'0451', '00000001', '200709', '01', 1000000, 2000000, 3000000, 4000000

'0451', '00000001', '200709', '02', 1000000, 2000000, 3000000, 4000000

'0451', '00000001', '200708', '01', 1000000, 2000000, 3000000, 4000000

'0451', '00000001', '200708', '02', 1000000, 2000000, 3000000, 4000000

'0451', '00000002', '200703', '01', 1000000, 2000000, 3000000, 4000000

'0451', '00000002', '200703', '02', 1000000, 2000000, 3000000, 4000000

'0451', '00000002', '200702', '01', 1000000, 2000000, 3000000, 4000000

'0451', '00000002', '200702', '02', 1000000, 2000000, 3000000, 4000000


00000001 고객의 최근월은 2007년09월.

00000002 고객의 최근월은 2007년03월.


따라서, 원하는 결과는...


brno    custno       recym   rent1   rent2   rent3   rent4   total

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

'0451', '00000001', '200709', 2000,  4000,   6000,   8000,   20000

'0451', '00000002', '200703', 2000,  4000,   6000,   8000,   20000


이 됩니다.


full scan을 1회만 하도록 (2)를 없애고, (1)을 아래와 같이 하면 결과가 잘못 나오네요.


  from (select brno, custno, recym,

                    sum(rent1) sum1, sum(rent2) sum2,

                    sum(rent3) sum3, sum(rent4) sum4

             from test

          group by brno, custno, recym

          having recym = max(recym)

         ) m


글이 길어졌네요.^^

자세하게 쓴다고 썼는데 잘 전달되었는지 모르겠습니다.

그러면 고수님들의 조언 부탁드리겠습니다.

[Top]
No.
제목
작성자
작성일
조회
1441db2 리눅스에 설치시 에러가 납니다... [1]
김영규
2007-10-05
9837
1440공부중에 헛갈린게 있어서 질문올립니다. [1]
black
2007-10-04
9246
1439DB2와 Oracle의 반올림 계산 [1]
초보
2007-09-26
13755
1438한번의 데이블 액세스로 합계와...
나도초보인가
2007-09-23
9425
1437DB2 사용시 발생되는 에러의 이유
이충섭
2007-09-19
11147
1436DB2 버젼은 어떻게 가는건지요? [1]
닝고이
2007-09-18
8811
1435[unixODBC]HP11iv3에서 DB2 ODBC 설치하기 [1]
KBAE
2007-09-14
10013
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다