mysql 일별 count 통계 쿼리
2021. 1. 26. 11:56ㆍ데이터베이스/mysql
728x90
반응형
일별로 사용한 count를 가져와보자 하는 생각으로 테스트 해봣습니다. 옛날에 짠 쿼리이고 검색하며 막 조합해서
쿼리 작성 하였습니다.
기간을 선택하게 하고 최대 30일까지만 선택가능하게 하여 날짜를 입력 받아 데이터를 가져오는 형식입니다.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
select B.api_id, c.api_nm,
count(day01)+count(day02)+count(day03)+count(day04)+count(day05)+
count(day06)+count(day07)+count(day08)+count(day09)+count(day10)+
count(day11)+count(day12)+count(day13)+count(day14)+count(day15)+
count(day16)+count(day17)+count(day18)+count(day19)+count(day20)+
count(day21)+count(day22)+count(day23)+count(day24)+count(day25)+
count(day26)+count(day27)+count(day28)+count(day29)+count(day30)+count(day31) AS total,
IFNULL(count(day01),0) day01,IFNULL(count(day02),0) day02,IFNULL(count(day03),0) day03,IFNULL(count(day04),0) day04,IFNULL(count(day05),0) day05,
IFNULL(count(day06),0) day06,IFNULL(count(day07),0) day07,IFNULL(count(day08),0) day08,IFNULL(count(day09),0) day09,IFNULL(count(day10),0) day10,
IFNULL(count(day11),0) day11,IFNULL(count(day12),0) day12,IFNULL(count(day13),0) day13,IFNULL(count(day14),0) day14,IFNULL(count(day15),0) day15,
IFNULL(count(day16),0) day16,IFNULL(count(day17),0) day17,IFNULL(count(day18),0) day18,IFNULL(count(day19),0) day19,IFNULL(count(day20),0) day20,
IFNULL(count(day21),0) day21,IFNULL(count(day22),0) day22,IFNULL(count(day23),0) day23,IFNULL(count(day24),0) day24,IFNULL(count(day25),0) day25,
IFNULL(count(day26),0) day26,IFNULL(count(day27),0) day27,IFNULL(count(day28),0) day28,IFNULL(count(day29),0) day29,IFNULL(count(day30),0) day30,
IFNULL(count(day31),0) day31
from(
SELECT
api_id,DATE_FORMAT(requested_at, '%Y-%m-%d') AS requested_at,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_FORMAT('2020-11-01', '%Y-%m-%d') then count(api_id) end day01,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 1 DAY) then count(api_id) end day02,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 2 DAY) then count(api_id) end day03,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 3 DAY) then count(api_id) end day04,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 4 DAY) then count(api_id) end day05,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 5 DAY) then count(api_id) end day06,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 6 DAY) then count(api_id) end day07,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 7 DAY) then count(api_id) end day08,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 8 DAY) then count(api_id) end day09,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 9 DAY) then count(api_id) end day10,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 10 DAY) then count(api_id) end day11,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 11 DAY) then count(api_id) end day12,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 12 DAY) then count(api_id) end day13,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 13 DAY) then count(api_id) end day14,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 14 DAY) then count(api_id) end day15,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 15 DAY) then count(api_id) end day16,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 16 DAY) then count(api_id) end day17,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 17 DAY) then count(api_id) end day18,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 18 DAY) then count(api_id) end day19,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 19 DAY) then count(api_id) end day20,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 20 DAY) then count(api_id) end day21,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 21 DAY) then count(api_id) end day22,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 22 DAY) then count(api_id) end day23,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 23 DAY) then count(api_id) end day24,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 24 DAY) then count(api_id) end day25,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 25 DAY) then count(api_id) end day26,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 26 DAY) then count(api_id) end day27,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 27 DAY) then count(api_id) end day28,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 28 DAY) then count(api_id) end day29,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 29 DAY) then count(api_id) end day30,
case when DATE_FORMAT(requested_at, '%Y-%m-%d') = DATE_ADD(DATE_FORMAT('2020-11-01', '%Y-%m-%d'), INTERVAL 30 DAY) then count(api_id) end day31
from api_access_histories
WHERE DATE_FORMAT(requested_at, '%Y-%m-%d') BETWEEN '2020-11-01'
and '2020-12-01'
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 |