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

MySQL에서 두 날짜 사이의 레코드 합계(SUM) 구하는 방법

MySQL에서 특정 두 날짜 사이에 해당하는 레코드의 합계를 구하려면 BETWEEN 키워드를 사용하면 됩니다. BETWEEN 연산자는 지정한 시작 날짜와 종료 날짜 범위 내에 있는 값만 필터링해 주기 때문에, 기간별 집계 쿼리를 작성할 때 매우 유용합니다.

실제 예제를 통해 단계별로 살펴보겠습니다. 먼저 데모용 테이블을 생성합니다.

mysql> create table DemoTable1444
    -> (
    -> Value int,
    -> PurchaseDate datetime
    -> );
Query OK, 0 rows affected (0.45 sec)

테이블 생성이 완료되면 INSERT 문을 사용해 샘플 데이터를 입력합니다.

mysql> insert into DemoTable1444 values(40,'2019-01-10');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1444 values(100,'2019-10-03');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1444 values(170,'2019-11-21');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1444 values(70,'2018-12-05');
Query OK, 1 row affected (0.11 sec)

SELECT 문으로 테이블의 모든 레코드를 조회해 데이터가 정상적으로 들어갔는지 확인합니다.

mysql> select * from DemoTable1444;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+-------+---------------------+
| Value | PurchaseDate        |
+-------+---------------------+
|    40 | 2019-01-10 00:00:00 |
|   100 | 2019-10-03 00:00:00 |
|   170 | 2019-11-21 00:00:00 |
|    70 | 2018-12-05 00:00:00 |
+-------+---------------------+
4 rows in set (0.00 sec)

두 날짜 사이의 합계 구하기

이제 본격적으로 두 날짜 사이의 값 합계를 구하는 쿼리입니다. WHERE 절과 함께 BETWEEN 키워드를 사용하여 '2019-10-02'부터 '2019-12-31' 사이의 구매 날짜(PurchaseDate)를 가진 레코드만 대상으로 SUM 함수를 적용합니다.

mysql> select sum(Value) from DemoTable1444 where PurchaseDate between '2019-10-02' and '2019-12-31';

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

+------------+
| sum(Value) |
+------------+
|        270 |
+------------+
1 row in set (0.02 sec)

결과를 보면 합계가 270으로 출력되었습니다. 이는 2019년 10월 3일의 100과 2019년 11월 21일의 170이 더해진 값입니다. 반면 2019년 1월 10일과 2018년 12월 5일의 레코드는 지정한 기간 범위에 포함되지 않으므로 집계에서 제외됩니다.

참고 사항

BETWEEN은 시작 값과 끝 값을 모두 포함(inclusive)하는 연산자라는 점을 기억하세요. 또한 datetime 타입 컬럼에 시간 정보까지 저장되어 있다면, 종료 날짜를 '2019-12-31'로 지정할 경우 당일 자정(00:00:00) 이후의 데이터는 누락될 수 있습니다. 이런 경우 종료 조건을 '< 2020-01-01'로 처리하거나, 날짜 함수를 활용해 범위를 조정하는 것이 안전합니다.