안녕하세요.
SQL 매우매우 초보입니다... 찾아봐도 잘모르겠어서 죄송한 마음으로 질문 올립니다.
아래 형태의 소스를 받았는데 속도가 너무 느려서 쿼리를 수정할 필요가 있습니다.
SELECT (SELECT IFNULL(SUM(IFNULL(AD1_RQ,0)),0) FROM TV_SUPPORT_SUB WHERE SPRT_IDX IN (SELECT SPRT_IDX FROM TV_SUPPORT_MASTER WHERE COMP_USER_KEY = A.USER_KEY AND SPRT_TYPE = 'AD' AND SPRT_STATUS = 'AD3' ) ) RQ1 FROM TV_USER A WHERE USER_TYPE IN ('P') ORDER BY RQ1 DESC;
제가 나름 그룹해본다고 아래같이 수정했습니다.
SELECT IFNULL(SUM(IFNULL(SS.AD1_RQ,0)),0) RQ1 FROM TV_USER A, TV_SUPPORT_SUB SS, TV_SUPPORT_MASTER SM WHERE USER_TYPE IN ('P') AND SM.COMP_USER_KEY = A.USER_KEY AND SM.SPRT_TYPE = 'AD' AND SM.SPRT_STATUS = 'AD3' GROUP BY SM.SPRT_IDX ORDER BY RQ1 DESC;
역시나 정상적으로 동작하지 않습니다.
어떤식으로 쿼리를 수정해야할까요...? ㅠ
TV_USER : 회원(기업) 정보 테이블
CREATE TABLE `tv_user` ( `USER_KEY` int(11) NOT NULL AUTO_INCREMENT COMMENT '회원기본키', `USER_ID` varchar(255) NOT NULL COMMENT '아이디', `USER_PWD` varchar(255) NOT NULL COMMENT '비밀번호', `COMP_YEAR` varchar(255) DEFAULT NULL COMMENT '업체년도', ... PRIMARY KEY (`USER_KEY`) ) ENGINE=MyISAM AUTO_INCREMENT=739 DEFAULT CHARSET=utf8 COMMENT='회원기본정보테이블';
TV_SUPPORT_MASTER : 지원관리 마스터 테이블, USER_KEY를 외래키로 여러개의 지원관리데이터를 생성합니다.
CREATE TABLE `tv_support_master` ( `SPRT_IDX` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '지원관리번호', `SPRT_TYPE` varchar(255) NOT NULL COMMENT '지원구분 (정산:AD,사업화지원:BS,성과:RS,컨설팅조회:CT,컨설팅보고서:CR)', `SPRT_SUB_TYPE` varchar(255) DEFAULT NULL COMMENT '지원상세구분', `SPRT_STATUS` varchar(255) DEFAULT NULL COMMENT '지원상태', `COMP_USER_KEY` varchar(255) DEFAULT NULL COMMENT '업체키', ... PRIMARY KEY (`SPRT_IDX`) ) ENGINE=MyISAM AUTO_INCREMENT=7600 DEFAULT CHARSET=utf8 COMMENT='지원관리 마스터 테이블';
TV_SUPPORT_SUB : 지원관리 서브 테이블, SPRT_IDX를 외래키로 여러개의 지원관리 상세정보데이터를 생성합니다.
CREATE TABLE `tv_support_sub` ( `SPRT_IDX` int(11) NOT NULL COMMENT '지원관리번호', `AD1_RQ` int(11) DEFAULT NULL, ... PRIMARY KEY (`SPRT_IDX`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='성과등록서브정보테이블';
결국 이 쿼리가 하고싶은 작업은 "사용자별 AD1_RQ의 총합" 입니다.
그래서 TV_SUPPORT_MASTER에서 TV_USER의 USER_KEY값과 TV_SUPPORT_MASTER의 COMP_USER_KEY값과 같은 데이터의 SPRT_IDX를 뽑은 후,
TV_SUPPORT_SUB에서 SPRT_IDX값이 포함되는 열의 AD1_RQ를 SUM하는 흐름입니다.
코드로는 어떻게 해야할지 모르겠습니다ㅠㅠㅠ
SELECT a.user_key , IFNULL(SUM(ss.ad1_rq), 0) rq1 FROM tv_user a LEFT OUTER JOIN tv_support_master sm ON sm.comp_user_key = a.user_key AND sm.sprt_type = 'AD' AND sm.sprt_status = 'AD3' LEFT OUTER JOIN tv_support_sub ss ON sm.sprt_idx = ss.sprt_idx WHERE a.user_type IN ('P') GROUP BY a.user_key ORDER BY rq1 DESC ;