쿼리 질문입이다 0 2 1,189

by 다어려워 [SQL Query] 통계 날짜 지점 [2019.06.25 06:31:41]


상품을 지점+날짜별로 통계를 내야하는데 이 부분이 너무 어려서 이렇게 글을 남게 되었습니다.

밑의 표는 예제입니다

상품코드 지점 날짜
A001 서울 2019-05-01
A001 서울 2019-05-15
A001 대전 2019-06-02
A001 대구 2019-06-19
A001 부산 2019-06-25
A002 서울 2019-05-01

 

해당 표가 저렇게 있을 때 지점+날짜별로 통계를 내야하는데요

A001 상품 통계

  1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
서울 0 0 0 0 2 0 0 0 0 0 0 0
대전 0 0 0 0 0 1 0 0 0 0 0 0
대구 0 0 0 0 0 1 0 0 0 0 0 0
부산 0 0 0 0 0 1 0 0 0 0 0 0

이런 식으로 뽑고 싶습니다

SELECT 지점, MONTH(`날짜`) AS `date`, count(*) FROM table WHERE 상품코드 = 'A001' GROUP BY `date`;

하면 상품에 대한 날짜별로 통계를 낼 수 있는데 없는 날짜(달)는 0으로 안 나오는 점과

이걸 지점으로도 나와야 하는데 이걸 어떻게 내야할지 몰라서 미칠거 같습니다.

아니면 지점이 4개이니 쿼리를 4번을 날려야 하는 생각도 들기 시작합니다

GROUP BY 를 2개의 칼럼으로 할 수도 없어서 이렇게 글을 남깁니다.

by 마농 [2019.06.25 07:31:37]
-- MariaDB 10.3 --
WITH 테이블 AS
(
SELECT 'A001' 상품코드, '서울' 지점, '2019-05-01' 날짜
UNION ALL SELECT 'A001', '서울', '2019-05-15'
UNION ALL SELECT 'A001', '대전', '2019-06-02'
UNION ALL SELECT 'A001', '대구', '2019-06-19'
UNION ALL SELECT 'A001', '부산', '2019-06-25'
UNION ALL SELECT 'A002', '서울', '2019-05-01'
)
SELECT 지점
     , COUNT(CASE 월 WHEN  1 THEN 1 END) m01
     , COUNT(CASE 월 WHEN  2 THEN 1 END) m02
     , COUNT(CASE 월 WHEN  3 THEN 1 END) m03
     , COUNT(CASE 월 WHEN  4 THEN 1 END) m04
     , COUNT(CASE 월 WHEN  5 THEN 1 END) m05
     , COUNT(CASE 월 WHEN  6 THEN 1 END) m06
     , COUNT(CASE 월 WHEN  7 THEN 1 END) m07
     , COUNT(CASE 월 WHEN  8 THEN 1 END) m08
     , COUNT(CASE 월 WHEN  9 THEN 1 END) m09
     , COUNT(CASE 월 WHEN 10 THEN 1 END) m10
     , COUNT(CASE 월 WHEN 11 THEN 1 END) m11
     , COUNT(CASE 월 WHEN 12 THEN 1 END) m12
  FROM (SELECT 지점
             , MONTH(날짜) 월
          FROM 테이블
         WHERE 상품코드 = 'A001'
           AND 날짜 LIKE '2019%'
        ) a
 GROUP BY 지점
;

 


by 다어려워 [2019.06.25 09:14:47]

답변 감사합니다 :)

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