반응형
안녕하세요. 오늘은 mysql에서 원하는 기간안에의 날짜 목록과 데이터를 구하는 방법에 대해 이야기해보려합니다.
일반적으로 데이터를 뽑게되면 데이터만 있는 날짜만 나오게됩니다.
예를 들어
10월 20일부터 10월 26일까지가 원하는 기간이고
10월 22일에만 데이터가 있는 상태에서 데이터를 뽑으면
아래와 같이 10월 22일만 날짜가 나오고 나머지 날짜는 나오지 않게됩니다.
이를 해결하기 위해서는 3가지가 필요합니다.
- 날짜 추출 쿼리
- 데이터 추출 쿼리
- Left outer join
1. 날짜 추출 쿼리
우선 날짜 추출 쿼리입니다.
Curdate()를 사용하여 현재일 기준으로 일주일 전의 데이터를 추출합니다.
1
2
|
select curdate() - INTERVAL (a.a) DAY as Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6) as a
|
cs |
2.데이터 추출 쿼리
이젠 원하는 데이터를 추출할 쿼리를 만들어 줍니다.
1
2
3
4
5
6
7
8
|
SELECT
MID(cs_regdate, 1,10) as Month
,count(case when cs_type ='1' then 1 end) as count
,count(case when cs_type ='2' then 1 end) as count2
FROM
테이블명
group by
Month
|
cs |
3. Left outer join
그리고 날짜 쿼리를 기준으로 데이터 쿼리를 left outer join 합니다.
날짜 쿼리는 x로, 데이터 쿼리 y로 지정한 다음 y쿼리의 날짜컬럼을 조인하게 됩니다.
그러면 데이터 없는 항목은 null이 나오게 됩니다. 이를 처리하기 위해서
가장 상단의 select문 밑에 ifnull이라면 0이 나오게끔 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
select
x.ok as 별칭
,ifnull(y.count,0) as 별칭
,ifnull(y.count2,0) as 별칭
from (
select
a.Date as ok
from (
select curdate() - INTERVAL (a.a) DAY as Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6) as a
) a
) x left outer join
(SELECT
MID(컬럼명, 1,10) as Month
,count(case when 조건 then 1 end) as 별칭
,count(case when 조건 then 1 end) as 별칭
FROM
테이블명
group by
Month
) y on x.ok= y.Month order by x.ok;
|
cs |
반응형
'Database' 카테고리의 다른 글
[mysql] 테이블명세서 추출 쿼리 정리!! (3) | 2021.03.11 |
---|---|
[mysql] 월별통계방법!! (데이터 없는 날짜 0 처리 방법) (0) | 2021.02.25 |
[mysql] count 조건 설정하는 방법 [통계쿼리정리] (0) | 2020.10.20 |
[Mysql] 현재달 및 현재달 통계 구하는 방법 (0) | 2020.10.19 |
[SQL] 조건별 검색 쿼리 정리!! (0) | 2020.10.02 |
댓글