본문 바로가기
DataBase/MySQL

MySQL 일별, 주별, 월별, 특정 기간별 통계 조회

by 코딩이라구 2022. 12. 19.

이번에는 MySQL에서 SELECT 조회 시 많이 사용하게 되는 쿼리문으로 일별 통계, 주별 통계, 월별 통계, 특정 기간별 통계를 날짜(DATE) 형식으로 어떻게 날짜별로 출력하는지 방법에 대하여 알아보도록 하겠습니다. 


MySQL DATE 형식 다양한 통계 조회

 

MySQL 날짜(DATE) 조건 검색 사용법

MySQL SELECT 문 사용 시 날짜(DATE) 조건을 사용하여 데이터를 검색할 수 있습니다. WHERE 조건문에서 특정 날짜와 일치하거나, BETWEEN 명령어를 사용하여 특정 날짜 이전 또는 이후 범위를 지정하여 레

chragu.com

 

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 일별, 주별, 월별, 지정된 기간별 통계 데이터를 조회하는 방법에 대하여 알아보았습니다.


⊙ 참고 문서 출처

1. https://bluexmas.tistory.com/626


MySQL 관련 포스팅 정보
 

MySQL 날짜, 시간 타입 (DATE, DATETIME, TIME, TIMESTAMP)

MySQL 날짜 및 시간 형식으로는 DATE, DATETIME, TIME, TIMESTAMP가 있습니다. 검색하고자 하는 조건에 맞는 타입을 사용할 수 있습니다. 이번에는 MySQL의 날짜, 시간 타입에 대하여 알아보도록 하겠습니다.

chragu.com

댓글