MySQL에서 특정 날짜의 레코드 수 세기
MySQL 테이블에 저장된 데이터 중 특정 날짜가 몇 번 등장하는지 확인하고 싶다면 COUNT(*) 함수와 WHERE 절을 함께 사용하면 됩니다. 이번 글에서는 예제를 통해 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 날짜를 저장할 테이블을 생성합니다.
mysql> create table DemoTable1946
(
ShippingDate date
);
Query OK, 0 rows affected (0.00 sec)2단계: 샘플 데이터 삽입
INSERT 명령어를 사용해 여러 날짜의 레코드를 입력합니다.
mysql> insert into DemoTable1946 values('2019-12-11');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1946 values('2018-12-11');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1946 values('2017-12-11');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1946 values('2019-04-22');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1946 values('2019-12-11');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1946 values('2015-12-11');
Query OK, 1 row affected (0.00 sec)3단계: 전체 데이터 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select * from DemoTable1946;
실행 결과는 다음과 같습니다.
+--------------+ | ShippingDate | +--------------+ | 2019-12-11 | | 2018-12-11 | | 2017-12-11 | | 2019-04-22 | | 2019-12-11 | | 2015-12-11 | +--------------+ 6 rows in set (0.00 sec)
총 6개의 레코드가 저장되어 있으며, 그중 '2019-12-11' 날짜는 두 번 등장하는 것을 확인할 수 있습니다.
4단계: 특정 날짜 개수 조회 쿼리 실행
이제 COUNT(*)와 DATE() 함수를 활용해 특정 날짜('2019-12-11')의 레코드 수를 세는 쿼리를 실행합니다.
mysql> select count(*) from DemoTable1946 where date(ShippingDate)='2019-12-11';
실행 결과는 다음과 같습니다.
+----------+ | count(*) | +----------+ | 2 | +----------+ 1 row in set (0.00 sec)
결과 해석 및 참고 사항
위 결과를 보면 '2019-12-11' 날짜의 배송 기록이 총 2건 있는 것을 알 수 있습니다.
여기서 사용한 DATE(ShippingDate) 함수는 컬럼 값이 DATETIME 타입일 경우 시간 부분을 제거하고 날짜만 비교하기 위해 사용됩니다. 만약 컬럼이 DATE 타입이라면 다음과 같이 더 간단하게 작성할 수도 있습니다.
mysql> select count(*) from DemoTable1946 where ShippingDate = '2019-12-11';
또한, 인덱스가 설정된 컬럼에 함수를 적용하면 인덱스를 활용하지 못할 수 있으므로, 대용량 테이블에서는 범위 조건(>=, <)을 사용하는 방식도 성능 면에서 고려해 볼 만합니다.