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
운영게시판
최근게시물
Sybase Q&A 3995 게시물 읽기
No. 3995
튜닝 좀 봐주세요.
작성자
경아
작성일
2010-02-03 14:09
조회수
7,261

급히 만들었어요.

전월말 잔고 10만원이하 고객이 당월말 10만원 이상으로 변경된 수 구하는 쿼리인데요,

서브쿼리가 너무 많은거 같고 중복도 심한거 같고... 그냥 말 그대로 짰는데 좀 더 간편하게 줄일 수 있을까요? 

초보라서 죄송합니다.... ㅠ_ㅠ

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

SELECT COUNT(X1.IDNO)
FROM (
    SELECT V.Idno  IDNO
    FROM (
        SELECT B.Idno  Idno
                ,SUM(A.AmotAsstTot) AmotAsstTot
          FROM DWRSASST_NEW A
                ,DWACMAST B
                ,MASS_CUST_LIST C
         WHERE A.DateBasic = '20091231'
           AND C.Idno = B.Idno
           AND A.Brchno  = B.Brchno
           AND A.DivGood = B.DivGood
           AND A.Gujano  = B.Gujano
         GROUP BY B.Idno
         )V
    WHERE V.AmotAsstTot < 100000
) X1
, (
    SELECT V.Idno IDNO
    FROM (
        SELECT B.Idno  Idno
                ,SUM(A.AmotAsstTot) AmotAsstTot
          FROM DWRSASST_NEW A
                ,DWACMAST B
                ,MASS_CUST_LIST C
         WHERE A.DateBasic = '20100131'
           AND C.Idno = B.Idno
           AND A.Brchno  = B.Brchno
           AND A.DivGood = B.DivGood
           AND A.Gujano  = B.Gujano
         GROUP BY B.Idno
         )V
    WHERE V.AmotAsstTot > 100000
)X2
WHERE X1.IDNO = X2.IDNO

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

select count(distinct Idno)
  from ( SELECT B.Idno  Idno,
                SUM(A.AmotAsstTot) AmotAsstTot
           FROM DWRSASST_NEW A, DWACMAST B
          WHERE A.DateBasic = '20091231'
            AND A.Brchno  = B.Brchno
            AND A.DivGood = B.DivGood
            AND A.Gujano  = B.Gujano
          GROUP BY B.Idno
        having SUM(A.AmotAsstTot) < 100000) X,
       ( SELECT B.Idno  Idno,
                SUM(A.AmotAsstTot) AmotAsstTot
          FROM DWRSASST_NEW A, DWACMAST B
         WHERE A.DateBasic = '20100131'
           AND A.Brchno  = B.Brchno
           AND A.DivGood = B.DivGood
           AND A.Gujano  = B.Gujano
         GROUP BY B.Idno
        HAVING SUM(A.AmotAsstTot) > 100000) Y
 WHERE X.IDNO = Y.IDNO

약간맘 바꿔 봤는데..  MASS_CUST_LIST 테이블은 꼭 써야 하는지 모르겠습니다만...

felcon님이 2010-02-08 09:52에 작성한 댓글입니다. Edit

SELECT A.DateBasic DateBasic,
       B.Idno  Idno,
       SUM(A.AmotAsstTot) AmotAsstTot
  INTO #temp1
  FROM DWRSASST_NEW A, DWACMAST B
 WHERE A.DateBasic IN ('20091231', 20100131')
   AND A.Brchno  = B.Brchno
   AND A.DivGood = B.DivGood
   AND A.Gujano  = B.Gujano
 GROUP BY DateBasic, Idno
;

// 경우에 따라서 여기에 인덱스를 만들어도...

SELECT count(distinct Idno)
  FROM
(
  SELECT Idno, AmotAsstTot
    FROM #temp1
   WHERE DateBasic = '20091231'
     AND AmotAsstTot < 100000
) X,
(
  SELECT Idno, AmotAsstTot
    FROM #temp1
   WHERE DateBasic = '20100131'
     AND AmotAsstTot > 100000
) Y,
 WHERE X.Idno = Y.Idno
;

맞는지 모르겠네요^^

세지아빠(sejiappa)님이 2010-02-09 12:27에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
3998쿼리 짜는것좀 도와주세요 [2]
최창순
2010-02-18
7498
3997[왕초보]저장된 image 어떻게 확인하는지 알려주세요 [1]
이정
2010-02-12
7073
3996쿼리 문법 좀.. [1]
호야
2010-02-08
10087
3995튜닝 좀 봐주세요. [2]
경아
2010-02-03
7261
3994dbisqlc 로 쿼리 실행하기!! 도와주세요!! [1]
초보
2010-02-02
11023
3993최근글 가져오기.. [1]
양은숙
2010-02-02
7852
3992프로시져 호출 할 때의 인수처리 및 컴파일 [4]
프로시져..
2010-01-31
11369
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다