이번에는 MySQL에서 SELECT 조회 시 많이 사용하게 되는 쿼리문으로 일별 통계, 주별 통계, 월별 통계, 특정 기간별 통계를 날짜(DATE) 형식으로 어떻게 날짜별로 출력하는지 방법에 대하여 알아보도록 하겠습니다.
MySQL DATE 형식 다양한 통계 조회
1. 테이블 데이터
- 데이터 타입은 현재 날짜(DATE)로 사용되었습니다.
- value INT
- regist_date DATE
- DATETIME 유형을 사용할 때에는 DATE_FORMAT() 함수를 사용하여 날짜 형식으로 출력하실 수 있습니다.
-- 날짜 순서대로 테이블 데이터를 조회
SELECT *
FROM TEST
ORDER BY regist_date;
-- 결과
+---------+--------------------+
| value | regist_date |
+---------+--------------------+
| 4 | 2022-01-02 |
| 8 | 2022-01-02 |
| 11 | 2022-02-28 |
| 30 | 2022-03-08 |
| 2 | 2022-04-27 |
| 7 | 2022-05-05 |
| 15 | 2022-05-05 |
| 50 | 2022-07-17 |
| 12 | 2022-08-15 |
| 1 | 2022-10-10 |
| 44 | 2022-11-30 |
+---------+--------------------+
2. 일별 통계
- 날짜별 value값의 통계를 출력하는 쿼리입니다.
- 결과를 보시면 1월 2일과 5월 5일 데이터가 일별로 합쳐진 것을 확인하실 수 있습니다.
-- 일별 통계 조회
SELECT DATE(regist_date) AS DATE,
SUM(VALUE) AS value
FROM TEST
GROUP BY DATE;
-- 결과
+---------+--------------------+
| value | regist_date |
+---------+--------------------+
| 12 | 2022-01-02 |
| 11 | 2022-02-28 |
| 30 | 2022-03-08 |
| 2 | 2022-04-27 |
| 22 | 2022-05-05 |
| 50 | 2022-07-17 |
| 12 | 2022-08-15 |
| 1 | 2022-10-10 |
| 44 | 2022-11-30 |
+---------+--------------------+
3. 주별 통계
- 각 주차별 value값의 통계를 출력하는 쿼리입니다.
-- 주별 통계 조회
SELECT DATE_FORMAT(regist_date, '%Y-%m') AS WEEKEND,
DATE_FORMAT(DATE_SUB(`regist_date`, INTERVAL (DAYOFWEEK(regist_date)-1) DAY), '%Y/%m/%d') AS Week_Start,
DATE_FORMAT(DATE_SUB(`regist_date`, INTERVAL (DAYOFWEEK(regist_date)-7) DAY), '%Y/%m/%d') AS Week_End,
SUM(value) AS value
FROM TEST
GROUP BY WEEKEND;
-- 결과
+-----------+--------------------+--------------------+-------------+
| WEKKEND | Week_Start | Week_End | value |
+-----------+--------------------+--------------------+-------------+
| 2022-01 | 2022-01-02 | 2022-01-08 | 12 |
| 2022-03 | 2022-02-27 | 2022-03-05 | 11 |
| 2022-03 | 2022-03-06 | 2022-03-12 | 30 |
| 2022-04 | 2022-04-24 | 2022-04-30 | 2 |
| 2022-05 | 2022-05-01 | 2022-05-07 | 22 |
| 2022-07 | 2022-07-17 | 2022-07-23 | 50 |
| 2022-08 | 2022-08-14 | 2022-08-20 | 12 |
| 2022-10 | 2022-10-09 | 2022-10-15 | 1 |
| 2022-12 | 2022-11-27 | 2022-12-03 | 44 |
+-----------+--------------------+--------------------+-------------+
4. 월별 통계
- 각 월별 value값의 통계를 출력하는 쿼리입니다.
- MONTH() 메서드를 쓰게 되면 해당 월만 출력되고, 년도는 출력되지 않습니다.
- 년도까지 출력하고 싶다면, DATE_FORMAT() 메서드를 사용하여 표현하실 수 있습니다.
- DATE_FORMAT(regist_date, '%Y-%m')
-- 월별 통계 조회
SELECT MONTH(regist_date) AS MON,
SUM(value) AS value
FROM TEST
GROUP BY MON;
-- 결과
+-------+-----------+
| MON | value |
+-------+-----------+
| 1 | 12 |
| 2 | 11 |
| 3 | 30 |
| 4 | 2 |
| 5 | 22 |
| 7 | 50 |
| 8 | 12 |
| 10 | 1 |
| 11 | 44 |
+-------+-----------+
5. 특정 기간별 통계
- 특정 기간을 지정하여 지정된 value값의 통계를 출력하는 쿼리입니다.
-- 특정 기간 (2022년 3월 ~ 8월까지) 데이터 월별 통계 조회
SELECT MONTH(regist_date) AS MON,
SUM(value) AS value
FROM TEST
WHERE DATE(regist_date) >= '2022-03-01'
AND DATE(regist_date) <= '2022-09-30'
GROUP BY MON;
-- 결과
+-------+-----------+
| MON | value |
+-------+-----------+
| 3 | 30 |
| 4 | 2 |
| 5 | 22 |
| 7 | 50 |
| 8 | 12 |
+-------+-----------+
- DATE_FORMAT() 메서드를 사용한 특정 기간별 통계 조회
-- DATE_FORMAT()을 이용한 특정 기간 ( 2022년 1월 ~ 7월 ) 데이터 통계 조회
SELECT DATE_FORMAT(regist_date, '%Y-%m') AS MON,
SUM(value) AS value
FROM TEST
WHERE DATE_FORMAT(regist_date, '%Y-%m') BETWEEN '2022-01'
AND '2022-07'
GROUP BY MON;
-- 결과
+-------+-----------+
| MON | value |
+-------+-----------+
| 1 | 12 |
| 2 | 11 |
| 3 | 30 |
| 4 | 2 |
| 5 | 22 |
| 7 | 50 |
+-------+-----------+
이상으로 MySQL 일별, 주별, 월별, 지정된 기간별 통계 데이터를 조회하는 방법에 대하여 알아보았습니다.
⊙ 참고 문서 출처
'DataBase > MySQL' 카테고리의 다른 글
MySQL DELETE 문 정리 (테이블 데이터 삭제) (0) | 2022.12.21 |
---|---|
MySQL 날짜(DATE) 조건 검색 사용법 (0) | 2022.12.21 |
MySQL 페이징 처리 - LIMIT, OFFSET 사용 방법 (0) | 2022.12.14 |
MySQL 날짜, 시간 타입 (DATE, DATETIME, TIME, TIMESTAMP) (0) | 2022.10.24 |
MySQL max_allowed_packet 확인 및 설정 방법 (MySQL 5.7) (0) | 2022.10.20 |
댓글