MySQL에서 날짜 데이터를 월 단위로 그룹화하여 값을 합산하려면 EXTRACT() 함수를 사용하면 됩니다. 이 함수는 날짜에서 특정 월(month) 정보만 추출할 수 있어서, 예를 들어 연도와 상관없이 1월에 해당하는 모든 가격을 합산하는 작업도 간단하게 처리할 수 있습니다.
1. 예제 테이블 생성하기
먼저 실습에 사용할 테이블을 만들어 보겠습니다.
mysql> create table DemoTable1415
-> (
-> ProductPurchaseDate date,
-> ProductPrice int
-> );
Query OK, 0 rows affected (0.53 sec)
2. 데이터 삽입하기
INSERT 문을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1415 values('2019-01-12',560);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1415 values('2018-01-14',1060);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1415 values('2017-03-21',780);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1415 values('2016-09-01',800);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1415 values('2019-01-14',100);
Query OK, 1 row affected (0.16 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 데이터를 조회해 보겠습니다.
mysql> select * from DemoTable1415;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+---------------------+--------------+
| ProductPurchaseDate | ProductPrice |
+---------------------+--------------+
| 2019-01-12 | 560 |
| 2018-01-14 | 1060 |
| 2017-03-21 | 780 |
| 2016-09-01 | 800 |
| 2019-01-14 | 100 |
+---------------------+--------------+
5 rows in set (0.00 sec)
4. 월별 합산 쿼리 작성하기
이제 핵심인 월별 합산 쿼리입니다. EXTRACT(MONTH FROM ...)로 구매일에서 월을 추출한 뒤, 별칭(alias)을 지정하고 SUM() 함수와 GROUP BY 절을 함께 사용하면 됩니다.
mysql> select extract(MONTH from ProductPurchaseDate) as month,sum(ProductPrice) as total_value from DemoTable1415
-> group by month;
실행 결과는 다음과 같습니다.
+-------+-------------+
| month | total_value |
+-------+-------------+
| 1 | 1720 |
| 3 | 780 |
| 9 | 800 |
+-------+-------------+
3 rows in set (0.00 sec)
결과 해석
출력 결과를 보면 1월 데이터가 연도와 관계없이 모두 하나로 묶여 합산된 것을 확인할 수 있습니다. 즉, 2019년 1월(560), 2018년 1월(1060), 2019년 1월(100)의 합계인 1720이 1월 행에 표시됩니다. 마찬가지로 3월은 780, 9월은 800으로 집계되었습니다.
이처럼 EXTRACT() 함수와 GROUP BY 절을 조합하면 연도를 무시하고 순수하게 월 기준으로 데이터를 집계할 수 있습니다. 반대로 특정 연도 내에서 월별 집계가 필요하다면 EXTRACT(YEAR FROM ...) 조건을 WHERE 절에 추가하거나, YEAR와 MONTH를 함께 그룹화 기준으로 사용하면 됩니다.