mysql 월별 count 통계!
2021. 1. 26. 12:26ㆍ데이터베이스/mysql
728x90
반응형
일별 통계를 하면서 월별도 같이 작업했습니다 일별과 거이 비슷하지만 조금은 쿼리가 달라집니다.!
월별은 년도와 월만 입력 받아 12개월 최대로 했습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
SELECT B.api_id, c.api_nm,
count(month01)+ count(month02)+ count(month03)+ count(month04)+ count(month05)+
count(month06)+ count(month07)+ count(month08)+ count(month09)+ count(month10)+
count(month11)+ count(month12) AS total,
IFNULL(count(month01),0) month01,IFNULL(count(month02),0) month02,IFNULL(count(month03),0) month03,IFNULL(count(month04),0) month04,IFNULL(count(month05),0) month05,
IFNULL(count(month06),0) month06,IFNULL(count(month07),0) month07,IFNULL(count(month08),0) month08,IFNULL(count(month09),0) month09,IFNULL(count(month10),0) month10,
IFNULL(count(month11),0) month11,IFNULL(count(month12),0) month12
FROM(
SELECT
api_id,DATE_FORMAT(requested_at, '%Y-%m-%d') AS requested_at,
case when RIGHT(LEFT(DATE_FORMAT(requested_at, '%Y-%m-%d'),7),2) = RIGHT(LEFT(DATE_FORMAT('2020-01-01', '%Y-%m-%d'),7),2) then count(api_id) end month01,
case when RIGHT(LEFT(DATE_FORMAT(requested_at, '%Y-%m-%d'),7),2) = RIGHT(LEFT(DATE_ADD(DATE_FORMAT('2020-01-01', '%Y-%m-%d'), INTERVAL 1 MONTH),7),2) then count(api_id) end month02,
case when RIGHT(LEFT(DATE_FORMAT(requested_at, '%Y-%m-%d'),7),2) = RIGHT(LEFT(DATE_ADD(DATE_FORMAT('2020-01-01', '%Y-%m-%d'), INTERVAL 2 MONTH),7),2) then count(api_id) end month03,
case when RIGHT(LEFT(DATE_FORMAT(requested_at, '%Y-%m-%d'),7),2) = RIGHT(LEFT(DATE_ADD(DATE_FORMAT('2020-01-01', '%Y-%m-%d'), INTERVAL 3 MONTH),7),2) then count(api_id) end month04,
case when RIGHT(LEFT(DATE_FORMAT(requested_at, '%Y-%m-%d'),7),2) = RIGHT(LEFT(DATE_ADD(DATE_FORMAT('2020-01-01', '%Y-%m-%d'), INTERVAL 4 MONTH),7),2) then count(api_id) end month05,
case when RIGHT(LEFT(DATE_FORMAT(requested_at, '%Y-%m-%d'),7),2) = RIGHT(LEFT(DATE_ADD(DATE_FORMAT('2020-01-01', '%Y-%m-%d'), INTERVAL 5 MONTH),7),2) then count(api_id) end month06,
case when RIGHT(LEFT(DATE_FORMAT(requested_at, '%Y-%m-%d'),7),2) = RIGHT(LEFT(DATE_ADD(DATE_FORMAT('2020-01-01', '%Y-%m-%d'), INTERVAL 6 MONTH),7),2) then count(api_id) end month07,
case when RIGHT(LEFT(DATE_FORMAT(requested_at, '%Y-%m-%d'),7),2) = RIGHT(LEFT(DATE_ADD(DATE_FORMAT('2020-01-01', '%Y-%m-%d'), INTERVAL 7 MONTH),7),2) then count(api_id) end month08,
case when RIGHT(LEFT(DATE_FORMAT(requested_at, '%Y-%m-%d'),7),2) = RIGHT(LEFT(DATE_ADD(DATE_FORMAT('2020-01-01', '%Y-%m-%d'), INTERVAL 8 MONTH),7),2) then count(api_id) end month09,
case when RIGHT(LEFT(DATE_FORMAT(requested_at, '%Y-%m-%d'),7),2) = RIGHT(LEFT(DATE_ADD(DATE_FORMAT('2020-01-01', '%Y-%m-%d'), INTERVAL 9 MONTH),7),2) then count(api_id) end month10,
case when RIGHT(LEFT(DATE_FORMAT(requested_at, '%Y-%m-%d'),7),2) = RIGHT(LEFT(DATE_ADD(DATE_FORMAT('2020-01-01', '%Y-%m-%d'), INTERVAL 10 MONTH),7),2) then count(api_id) end month11,
case when RIGHT(LEFT(DATE_FORMAT(requested_at, '%Y-%m-%d'),7),2) = RIGHT(LEFT(DATE_ADD(DATE_FORMAT('2020-01-01', '%Y-%m-%d'), INTERVAL 11 MONTH),7),2) then count(api_id) end month12
FROM api_access_histories
WHERE DATE_FORMAT(requested_at, '%Y-%m-%d') BETWEEN '2020-01-01' AND '2020-12-31'
GROUP BY api_id, DATE_FORMAT(requested_at, '%Y-%m-%d')
)A
LEFT JOIN api_access_histories B ON A.api_id = B.api_id AND DATE_FORMAT(A.requested_at, '%Y-%m-%d') = DATE_FORMAT(B.requested_at, '%Y-%m-%d')
LEFT JOIN tb__api_info C ON a.api_id = c.api_id
GROUP BY B.api_id
|
cs |
화면과 결과는 이렇씁니다. 전에 작성한 일별 쿼리와 비슷합니다.
728x90
'데이터베이스 > mysql' 카테고리의 다른 글
mysql 일별 count 통계 쿼리 (2) | 2021.01.26 |
---|---|
mysql 날짜 조회 시 date_format 초기화 하여 셀렉트 하기 (0) | 2021.01.13 |
mysql 테이블 컬럼 정의 쿼리 (0) | 2021.01.11 |