MySQL에서 현재 날짜(오늘)에 등록한 사용자 수를 확인하려면 COUNT() 함수와 GROUP BY MONTH() 절을 함께 사용하면 됩니다. 그리고 현재 날짜와 비교할 때는 CURRENT_DATE() 또는 CURDATE() 함수를 활용합니다.
1. 현재 날짜 확인하기
먼저 CURDATE() 함수로 현재 시스템 날짜를 확인해 보겠습니다.
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2019-11-30 |
+------------+
1 row in set (0.00 sec)
2. 테이블 생성하기
예제에 사용할 테이블을 먼저 생성합니다. 이름(Name)과 등록 일시(RegisteringDate) 컬럼으로 구성된 간단한 테이블입니다.
mysql> create table DemoTable1819
(
Name varchar(20),
RegisteringDate datetime
);
Query OK, 0 rows affected (0.00 sec)
3. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 여러 건의 레코드를 입력합니다. 의도적으로 다양한 날짜의 데이터를 넣어 비교 결과를 명확하게 확인할 수 있도록 했습니다.
mysql> insert into DemoTable1819 values('Chris','2019-11-29 12:30:34');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1819 values('David','2019-11-30 12:30:34');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1819 values('Mike','2019-12-30 12:30:34');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1819 values('Sam','2018-11-30 11:00:00');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1819 values('Carol','2019-11-30 10:00:00');
Query OK, 1 row affected (0.00 sec)4. 전체 데이터 조회하기
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select * from DemoTable1819;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-------+---------------------+
| Name | RegisteringDate |
+-------+---------------------+
| Chris | 2019-11-29 12:30:34 |
| David | 2019-11-30 12:30:34 |
| Mike | 2019-12-30 12:30:34 |
| Sam | 2018-11-30 11:00:00 |
| Carol | 2019-11-30 10:00:00 |
+-------+---------------------+
5 rows in set (0.00 sec)
5. 오늘 등록한 사용자 수 집계하기
이제 핵심 쿼리입니다. WHERE 절에서 DATE() 함수로 등록 일시에서 날짜 부분만 추출한 뒤 CURDATE()와 비교하고, COUNT()로 해당하는 레코드 수를 집계합니다.
mysql> select count(RegisteringDate) as Output from DemoTable1819
WHERE DATE(RegisteringDate) = CURDATE() GROUP BY MONTH(RegisteringDate);
실행 결과는 다음과 같습니다.
+--------+
| Output |
+--------+
| 2 |
+--------+
1 row in set (0.00 sec)
결과 해석
출력 결과 '2'는 현재 날짜(2019-11-30)에 등록한 사용자가 두 명(David, Carol)이라는 의미입니다. 나머지 레코드들은 어제, 다음 달, 작년 등 다른 날짜에 등록된 데이터이므로 집계에서 제외되었습니다.
참고 사항
DATETIME 타입 컬럼은 시간 정보까지 포함하고 있으므로, 단순히 RegisteringDate = CURDATE()처럼 직접 비교하면 시간까지 일치해야 하기 때문에 원하는 결과를 얻을 수 없습니다. 반드시 DATE() 함수로 날짜 부분만 잘라낸 후 비교해야 정확한 결과를 얻을 수 있습니다.