Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 같은 날짜별 값 합계 구하기 – DATE()와 GROUP BY 활용법

MySQL에서 datetime 타입의 날짜 데이터를 일(day) 단위로 그룹화하여 합계를 구하려면 GROUP BY 절과 DATE() 함수를 함께 사용하면 됩니다. 이 글에서는 예제 테이블을 직접 만들어 보면서, 같은 날짜에 속한 여러 레코드의 가격을 하나로 합산하는 방법을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성하기

먼저 구매 날짜(PurchaseDate)와 상품 가격(ProductPrice)을 저장할 테이블을 생성합니다.

mysql> create table DemoTable1358
    -> (
    -> PurchaseDate datetime,
    -> ProductPrice int
    -> );
Query OK, 0 rows affected (1.59 sec)

2. 샘플 데이터 삽입하기

INSERT 문으로 레코드를 추가합니다. 여기서는 시간은 다르지만 날짜가 겹치는 레코드를 의도적으로 포함시켰습니다. 이렇게 해야 그룹화 결과를 명확하게 확인할 수 있습니다.

mysql> insert into DemoTable1358 values('2019-09-20 12:34:00', 450);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable1358 values('2019-09-21 11:00:00', 1050);
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable1358 values('2018-09-21 02:10:00', 2050);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1358 values('2019-09-21 05:20:40', 5050);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable1358 values('2016-09-21 04:10:56', 1000);
Query OK, 1 row affected (0.18 sec)

3. 전체 레코드 조회하기

SELECT 문으로 테이블의 모든 데이터를 확인합니다.

mysql> select * from DemoTable1358;

실행 결과는 다음과 같습니다.

+---------------------+--------------+
| PurchaseDate        | ProductPrice |
+---------------------+--------------+
| 2019-09-20 12:34:00 |          450 |
| 2019-09-21 11:00:00 |         1050 |
| 2018-09-21 02:10:00 |         2050 |
| 2019-09-21 05:20:40 |         5050 |
| 2016-09-21 04:10:56 |         1000 |
+---------------------+--------------+
5 rows in set (0.00 sec)

4. 같은 날짜별로 가격 합산하기

핵심 쿼리는 다음과 같습니다. DATE() 함수가 datetime 값에서 날짜 부분만 추출하기 때문에, 시간이 달라도 같은 날짜인 레코드들은 하나의 그룹으로 묶입니다.

mysql> select PurchaseDate,sum(ProductPrice) from DemoTable1358
    -> group by date(PurchaseDate);

실행 결과는 다음과 같습니다.

+---------------------+-------------------+
| PurchaseDate        | sum(ProductPrice) |
+---------------------+-------------------+
| 2019-09-20 12:34:00 |               450 |
| 2019-09-21 11:00:00 |              6100 |
| 2018-09-21 02:10:00 |              2050 |
| 2016-09-21 04:10:56 |              1000 |
+---------------------+-------------------+
4 rows in set (0.00 sec)

결과 분석

출력 결과를 보면 원래 5개였던 레코드가 4개 행으로 줄어든 것을 확인할 수 있습니다. 특히 2019-09-21에 해당하는 세 개의 레코드(1050 + 2050 + 5050)가 하나로 병합되어 6100이라는 합계가 산출되었습니다.

정리하면, datetime 컬럼을 일 단위로 집계할 때는 다음 두 가지가 핵심입니다.

  • DATE() 함수로 시간 정보를 제거하고 날짜만 추출한다.
  • GROUP BY date(컬럼명)으로 같은 날짜의 레코드를 하나의 그룹으로 묶는다.

이 패턴은 일별 매출 집계, 일별 방문자 수 통계 등 실무에서 매우 자주 사용되므로 꼭 익혀두시길 권장합니다.