일자별 통계 데이터를 조회하고 싶습니다. 0 3 2,637

by DJ메탈짱™ [SQL Query] [2017.04.26 09:30:26]


쿠폰을 사용한 정보를 가지고 일자별로
총 발급건수 / 사용건수 / 쿠폰비용을 뽑아 내려고 합니다.
쿠폰종류별로 일자별로 추출하려고 하는데요...

SELECT 
    "쿠폰번호"
    , "쿠폰유형"
    , "쿠폰명"
    , (SELECT COUNT(1) FROM 쿠폰발행정보 WHERE 쿠폰번호=C.쿠폰번호 AND TO_CHAR(쿠폰발급일,'YYYYMMDDHH24MISS') BETWEEN '20170425000000' AND '20170430235959') "총발급수"
    , (SELECT COUNT(1) FROM 쿠폰발행정보 WHERE 쿠폰사용여부='Y' AND 쿠폰번호=C.쿠폰번호 AND TO_CHAR(쿠폰사용일,'YYYYMMDDHH24MISS') BETWEEN '20170425000000' AND '20170430235959') "사용수"
    ,SUM(B.쿠폰사용비용) "사용금액"
FROM 주문 A, 주문부가비용 B, 쿠폰발행정보 C
WHERE A.주문번호=B.주문번호
    AND A.주문번호=C.주문번호
    AND C.쿠폰사용여부='Y'
    AND TO_CHAR(C.쿠폰사용일,'YYYYMMDDHH24MISS') BETWEEN '20170425000000' AND '20170430235959'
    AND B.사용된쿠폰발행번호=C.쿠폰발행번호
GROUP BY 쿠폰번호
;

대략적인 쿼리는 이렇게 해봤는데..
일자별로 쿠폰종류별로 총 발급건수 / 사용건수 / 쿠폰비용을 뽑아 내기가 어렵네요..
스칼라 서브쿼리를 사용하면 안되고 WHERE 서브쿼리로 해야 할거 같은데...
팁좀 부탁드립니다 ㅠ.ㅠ

우연찮게 검색해봤을때 마농님 팁을 봤는데..
날짜 범위를 CONNECT BY LEVEL로 테이블로 만들어서 업무테이블과 join해서 rollup(?)을 하신것을 보긴 했는데....ㅠ.ㅠ

선배님들 도움 부탁드립니다.

by 마농 [2017.04.26 11:17:33]

일자별로 쿠폰종류별로 집계를 해야 한다면?
(GROUP BY 일자, 쿠폰종류) 하시면 됩니다.


by 마농 [2017.04.26 13:31:02]
SELECT 일자
     , 쿠폰유형
     , SUM(발급건수) 발급건수
     , SUM(사용건수) 사용건수
     , SUM(사용금액) 사용금액
  FROM (SELECT TO_CHAR(쿠폰발급일, 'yyyymmdd') 일자
             , 쿠폰유형
             , COUNT(*) 발급건수
             , 0 사용건수
             , 0 사용금액
          FROM 쿠폰발행정보
         WHERE 쿠폰발급일 >= TO_DATE('20170425', 'yyyymmdd')
           AND 쿠폰발급일 <  TO_DATE('20170430', 'yyyymmdd') + 1
         GROUP BY TO_CHAR(쿠폰발급일, 'yyyymmdd'), 쿠폰유형
         UNION ALL
        SELECT TO_CHAR(쿠폰사용일, 'yyyymmdd') 일자
             , 쿠폰유형
             , 0 발급건수
             , COUNT(*) 사용건수
             , SUM(b.쿠폰사용비용) 사용금액
          FROM 쿠폰발행정보 a
             , 주문부가비용 b
         WHERE a.쿠폰사용일 >= TO_DATE('20170425', 'yyyymmdd')
           AND a.쿠폰사용일 <  TO_DATE('20170430', 'yyyymmdd') + 1
           AND a.쿠폰사용여부 = 'Y'
           AND a.쿠폰발행번호 = b.사용된쿠폰발행번호
         GROUP BY TO_CHAR(쿠폰사용일, 'yyyymmdd'), 쿠폰유형
        )
 GROUP BY 일자, 쿠폰유형
;

 


by DJ메탈짱™ [2017.04.26 15:39:34]

아~~~각각의 건수로 예상되는 놈들을 Union으로 레코드를 뽑아내고 group by 를 하면 됐던거네요.
응용해서 진행해보도록 할께요. 항상 도움많이 되고 있어요..감사드립니다 ^^
DB를 정말 잘하고 싶은데. ㅠ.ㅠ 매번 사소한 문제로 여기저기 검색하고 문의하고... 오랜 개발 경력이 있지만
매번 부끄럽네요 ㅠ.ㅠ

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