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

MySQL에서 날짜별 일 수를 계산하는 방법

MySQL에서 날짜별로 일 수를 계산하는 방법

MySQL에서 datetime 타입의 날짜 컬럼을 기준으로 각 날짜별 합계를 구하려면 DATE() 함수와 SUM() 함수를 GROUP BY 절과 함께 사용하면 됩니다. 이번 글에서는 예제 테이블을 만들고 날짜별 데이터 합계를 계산하는 과정을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 datetime 타입의 배송일(ShippingDate) 컬럼과 해당 날짜의 개수(CountOfDate)를 저장할 int 타입 컬럼을 가진 테이블을 생성합니다.

mysql> create table DemoTable
(
    ShippingDate datetime,
    CountOfDate int
);
Query OK, 0 rows affected (0.52 sec)

2. 데이터 삽입하기

다음은 INSERT 명령을 사용하여 테이블에 레코드를 삽입하는 쿼리입니다.

mysql> insert into DemoTable values('2018-01-31',6);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('2016-12-01',15);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('2016-12-01',10);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2016-12-01',5);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('2019-04-09',3);
Query OK, 1 row affected (1.05 sec)
mysql> insert into DemoTable values('2018-01-31',4);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2019-04-09',4);
Query OK, 1 row affected (0.14 sec)

3. 저장된 데이터 확인하기

SELECT 명령을 사용하여 테이블에 저장된 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같이 날짜(Date)와 개수(Count)가 함께 출력됩니다.

+---------------------+-------------+
| ShippingDate        | CountOfDate |
+---------------------+-------------+
| 2018-01-31 00:00:00 |           6 |
| 2016-12-01 00:00:00 |          15 |
| 2016-12-01 00:00:00 |          10 |
| 2016-12-01 00:00:00 |           5 |
| 2019-04-09 00:00:00 |           3 |
| 2018-01-31 00:00:00 |           4 |
| 2019-04-09 00:00:00 |           4 |
+---------------------+-------------+
7 rows in set (0.00 sec)

4. 날짜별 합계 계산하기

각 날짜별로 CountOfDate 값의 합계를 구하려면 아래와 같은 쿼리를 사용합니다. 여기서 date() 함수는 datetime 값에서 시간 부분을 제거하고 날짜만 추출하며, group by 절을 통해 같은 날짜끼리 그룹화한 후 sum() 함수로 합계를 계산합니다.

mysql> select date(ShippingDate),sum(CountOfDate) from DemoTable group by date(ShippingDate);

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

+--------------------+------------------+
| date(ShippingDate) | sum(CountOfDate) |
+--------------------+------------------+
| 2018-01-31         |               10 |
| 2016-12-01         |               30 |
| 2019-04-09         |                7 |
+--------------------+------------------+
3 rows in set (0.00 sec)

결과 해석

출력 결과를 보면 2018년 1월 31일에는 6 + 4 = 10, 2016년 12월 1일에는 15 + 10 + 5 = 30, 2019년 4월 9일에는 3 + 4 = 7로 각 날짜별 합계가 정상적으로 계산된 것을 확인할 수 있습니다. 이처럼 DATE(), SUM(), GROUP BY를 조합하면 datetime 컬럼의 시간 정보를 무시하고 날짜 단위로 손쉽게 집계할 수 있습니다.