상품을 지점+날짜별로 통계를 내야하는데 이 부분이 너무 어려서 이렇게 글을 남게 되었습니다.
밑의 표는 예제입니다
상품코드 | 지점 | 날짜 |
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개의 칼럼으로 할 수도 없어서 이렇게 글을 남깁니다.
-- 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 지점 ;