[삭제] 1 5 1,202

by 최민준만두 [삭제] [2017.01.23 11:06:37]


[삭제][삭제][삭제][삭제][삭제][삭제]

by 겸댕2후니 [2017.01.23 18:19:02]
위에 샘플만 봤을때, 결국 모든 행에대해서 통계가 이루어지는데

어떤이유로 where절로 나누어서 union all 하시는지?

select sum(dd)
from a
group by DATE 'YYYY-MM', STATE;

하면 되는거 아닌가요?

 


by 마농 [2017.01.24 09:44:56]

질문한 내용 그대로 답변드릴 수밖에 없습니다.
쿼리를 그대로 올리지 못하더라도 최소한 비슷하게는 올려주셔야 합니다.
올려주신 쿼리와 실제 쿼리는 상당히 많은 부분이 다를 듯 하네요.


집계 테이블을 별도로 두는 방법이 있습니다.
매월 초 전월 자료를 집계하여 저장해 두는 것입니다.


by 마농 [2017.01.24 14:25:20]

위 두개 쿼리는 하나로 합칠 수 있겠네요.
 

SELECT rdate
     ,  LEFT(rdate, 4) ryear
     , RIGHT(rdate, 2) rmonth
     , name
     , SUM(i_cnt   ) i_cnt
     , SUM(i_price ) i_price
     , SUM(p_cnt   ) p_cnt
     , SUM(p_price ) p_price
     , SUM(a_cnt   ) a_cnt
     , SUM(a_price ) a_price
     , SUM(p_margin) p_margin
  FROM (SELECT DATE_FORMAT(t.reg_date, '%Y-%m') rdate
             , t.cname name
             , COUNT(CASE WHEN t.pstate IN ('03', '10') AND t.astate != '05' THEN 1 END) i_cnt
             , SUM(  CASE WHEN t.pstate IN ('03', '10') AND t.astate != '05' THEN t.pkg_price END) i_price
             , COUNT(CASE WHEN t.pstate IN ('05', '06') THEN 1 END) p_cnt
             , SUM(  CASE WHEN t.pstate IN ('05', '06') THEN t.pkg_price END) p_price
             , 0 a_cnt
             , 0 a_price
             , 0 p_margin
          FROM tablee t
         WHERE t.pstate IN ('03', '10', '05', '06')
           AND t.reg_date >= #startDate:DATE#
           AND t.reg_date <  #endDate:DATE# + INTERVAL 1 DAY
         GROUP BY DATE_FORMAT(t.reg_date, '%Y-%m'), t.ccd
         UNION ALL
        SELECT DATE_FORMAT(t.a_date, '%Y-%m') rdate
             , t.cname name
             , 0 i_cnt
             , 0 i_price
             , 0 p_cnt
             , 0 p_price
             , COUNT(*)    a_cnt
             , SUM(t.apri) a_price
             , SUM(t.pamt) p_margin
          FROM tablee t
         WHERE t.pstate IN ('01', '02', '03', '04')
           AND t.astate = '99'
           AND t.a_date >= #startDate:DATE#
           AND t.a_date <  #endDate:DATE# + INTERVAL 1 DAY
         GROUP BY DATE_FORMAT(t.a_date, '%Y-%m'), t.ccd
        )
 GROUP BY rdate, name
 ORDER BY rdate, name
;

 


by 마농 [2017.01.24 15:46:57]

이미 a_date 에 인덱스가 있는 것 아닌가요?

추출속성을 따로 만들 필요는 없습니다.


by 마농 [2017.01.24 16:31:59]

인덱스는 그룹바이에서 타는게 아니라 조건절에서 타는 거죠.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입