สามารถนับจำนวนผู้สมัครในวันปัจจุบันได้โดยใช้ COUNT() ร่วมกับ WHERE DATE(column) = CURDATE() และ GROUP BY MONTH() เพื่อจัดกลุ่มตามเดือน
ตัวอย่างการใช้งาน
1. ตรวจสอบวันที่ปัจจุบัน
mysql> select curdate();
+------------+ | curdate() | +------------+ | 2019-11-30 | +------------+ 1 row in set (0.00 sec)
2. สร้างตารางและเพิ่มข้อมูล
mysql> create table DemoTable1819 ( Name varchar(20), RegisteringDate datetime ); Query OK, 0 rows affected (0.00 sec)
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)
ข้อมูลทั้งหมด:
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)
3. นับจำนวนผู้สมัครในวันนี้ (2019-11-30) จัดกลุ่มตามเดือน
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)
อธิบายการทำงาน
DATE(RegisteringDate)- ดึงเฉพาะส่วนวันที่จาก DATETIMECURDATE()- วันที่ปัจจุบัน (2019-11-30)WHERE DATE(RegisteringDate) = CURDATE()- กรองเฉพาะวันนี้ (David และ Carol)GROUP BY MONTH(RegisteringDate)- จัดกลุ่มตามเดือน (ทั้งคู่อยู่ในเดือน 11)COUNT(RegisteringDate)- นับจำนวน = 2
Query แบบง่ายกว่า (ไม่ต้อง GROUP BY)
SELECT COUNT(*) as TodayRegistrations FROM DemoTable1819 WHERE DATE(RegisteringDate) = CURDATE();
ผลลัพธ์เดียวกัน แต่ไม่มีการจัดกลุ่มเดือน
ขยาย: นับรายวันในช่วง 7 วันที่ผ่านมา
SELECT DATE(RegisteringDate) as RegDate, COUNT(*) as Count FROM DemoTable1819 WHERE RegisteringDate >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY DATE(RegisteringDate) ORDER BY RegDate;
สรุป: ใช้ WHERE DATE(datetime_col) = CURDATE() กรองวันนี้ แล้ว COUNT(*) นับจำนวน GROUP BY MONTH() ใช้เมื่อต้องการแยกสถิติรายเดือน