제가 하고 싶은 것을 구글링을 통해서
여기에서 겨우 찾았는데요 오라클이라고 하네요 ㅠ (=> http://www.gurubee.net/article/56286)
SELECT NVL(TO_CHAR(dtime, 'yyyymmdd'), '전체') dt , COUNT(*) tot , COUNT(DECODE(product, '상품A', 1)) 상품A , COUNT(DECODE(product, '상품B', 1)) 상품B , COUNT(DECODE(product, '상품C', 1)) 상품C FROM t WHERE dtime >= TO_DATE('20120620', 'yyyymmdd') AND dtime < TO_DATE('20120701', 'yyyymmdd') + 1 GROUP BY ROLLUP(TO_CHAR(dtime, 'yyyymmdd'))
요고와
SELECT NVL(a.dt, '전체') 날짜 , NVL(SUM(b.tot), 0) tot , NVL(SUM(b.상품A), 0) 상품A , NVL(SUM(b.상품B), 0) 상품B , NVL(SUM(b.상품C), 0) 상품C FROM (SELECT TO_CHAR(TO_DATE('20120620', 'yyyymmdd') + LEVEL - 1, 'yyyymmdd') dt FROM dual CONNECT BY LEVEL <= TO_DATE('20120701', 'yyyymmdd') - TO_DATE('20120620', 'yyyymmdd') + 1 ) a , (SELECT TO_CHAR(dtime, 'yyyymmdd') dt , COUNT(*) tot , COUNT(DECODE(product, '상품A', 1)) 상품A , COUNT(DECODE(product, '상품B', 1)) 상품B , COUNT(DECODE(product, '상품C', 1)) 상품C FROM t WHERE dtime >= TO_DATE('20120620', 'yyyymmdd') AND dtime < TO_DATE('20120701', 'yyyymmdd') + 1 GROUP BY TO_CHAR(dtime, 'yyyymmdd') ) b WHERE a.dt = b.dt(+) GROUP BY ROLLUP(a.dt) ;
요고 mysql 버젼으로 변경할 수 있을까요?
고수님들 한수 가르쳐 주십시오~~~
잠을 못자고 있습니다. ㅠ
달력 테이블을 미리 만들어 두시고 사용하시면 편리합니다.
MySQL 달력 만들기 : http://www.gurubee.net/article/65315
SELECT IFNULL(a.dt, '전체') 날짜 , IFNULL(SUM(b.tot), 0) tot , IFNULL(SUM(b.상품A), 0) 상품A , IFNULL(SUM(b.상품B), 0) 상품B , IFNULL(SUM(b.상품C), 0) 상품C FROM (SELECT dt FROM 달력테이블 WHERE dt >= '20120620' AND dt <= '20120701' ) a LEFT OUTER JOIN (SELECT DATE_FORMAT(dtime, '%Y%m%d') dt , COUNT(*) tot , COUNT(CASE product WHEN '상품A' THEN 1 END) 상품A , COUNT(CASE product WHEN '상품B' THEN 1 END) 상품B , COUNT(CASE product WHEN '상품C' THEN 1 END) 상품C FROM t WHERE dtime >= CAST('20120620' AS DATE) AND dtime < CAST('20120701' AS DATE) + INTERVAL 1 DAY GROUP BY DATE_FORMAT(dtime, '%Y%m%d') ) b ON a.dt = b.dt GROUP BY a.dt WITH ROLLUP ;