월별 합계를 구하는 중인데 도움 좀 부탁드립니다.. 0 2 1,226

by tester0101 [SQL Query] [2016.08.29 14:43:25]


안녕하세요, 월별 통계 관련해서 질문 좀 드리겠습니다..

 

user_id            application_id         queue_name         yyyy         mm         slotTime    

byeongwook.noh     dcv                     dcv                2016          02            1622
byeongwook.noh     dcv                     dcv                2016          02            724
byeongwook.noh     dcv                     dcv                2016          02            74
byeongwook.noh     dcv                     dcv                2016          02            50
byeongwook.noh     dcv                     dcv                2016          02            84
byeongwook.noh     dcv                     dcv                2016          02            306
byeongwook.noh     dcv                     dcv                2016          02            521
byeongwook.noh     dcv                     dcv                2016          02            49
changyoung.choi     160CFD             160CFD             2016          02            628704
changyoung.choi     128IH                 128IH              2016          02            7554048
changyoung.choi     128IH                 128IH              2016          02            16662096
changyoung.choi     160CFD             160CFD             2016          02            520768
changyoung.choi     512CFD             512CFD             2016          02            16256

 

위와 같은 데이터가 있습니다.(너무 많아서 일부만...)

user_id, application_id, queue_name 당 월별 slotTime 을 구해야해서

아래와 같이 rollup 했습니다.

 

SELECT
      nvl(userid,'-') userid, 
      nvl(apps,'-') apps, 
      nvl(queue,'-') queue, 
      nvl(year,'-') year, 
      nvl(month,'-') month,
      sum(slotTime) as slotTime
FROM (
       SELECT 
            user_id as userid, 
            application_id as apps, 
            queue_name as queue,
            yyyy as year,
            mm as month,
            (TURNAROUND_TIME-WAIT_TIME)*cpu_num slotTime
       FROM REPORT_JOB
       WHERE yyyymmdd between '20150701' and  '20160829'
     ) 
GROUP BY ROLLUP(userid, apps, queue, year, month);

 

근데 결과를

userid apps queue 2015/01 .... 2016/01
user1 app1 queue1 100 .... 100
    queue2 200 .... 200

이런 형태로 나타내고 싶은데 어떻게 쿼리를 바꿔야 할까요?

rollup으로 했을 때 값은 맞는 것 같지만..

필요없는 통계도 나오고해서 보기가 불편해서 바꾸고싶습니다ㅠ

 

by 마농 [2016.08.29 15:17:33]

ROLLUP 은 소계 구할 때 사용하구요.
지금 원하시는 형태는 PIVOT(행을 열로 변환) 입니다.
단 PIVOT 할 때 컬럼의 갯수와 값은 고정입니다.
가변 적용하려면 동적 쿼리 작성하셔야 합니다.

SELECT userid, apps, queue
     , SUM(DECODE(yyyy||mm, '201501', slotTime)) "201501"
     , SUM(DECODE(yyyy||mm, '201502', slotTime)) "201502"
     , SUM(DECODE(yyyy||mm, '201503', slotTime)) "201503"
     , ...
  FROM (...)
 GROUP BY userid, apps, queue
 ORDER BY userid, apps, queue
;

 


by tester0101 [2016.08.29 15:58:03]

마농님 감사합니다.

많은 도움이 되었습니다. 제가 너무나 부족하네요^^;

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