Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

นับจำนวนผู้สมัครในวันปัจจุบันด้วย MySQL COUNT และ CURDATE

สามารถนับจำนวนผู้สมัครในวันปัจจุบันได้โดยใช้ 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)

อธิบายการทำงาน

  1. DATE(RegisteringDate) - ดึงเฉพาะส่วนวันที่จาก DATETIME
  2. CURDATE() - วันที่ปัจจุบัน (2019-11-30)
  3. WHERE DATE(RegisteringDate) = CURDATE() - กรองเฉพาะวันนี้ (David และ Carol)
  4. GROUP BY MONTH(RegisteringDate) - จัดกลุ่มตามเดือน (ทั้งคู่อยู่ในเดือน 11)
  5. 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() ใช้เมื่อต้องการแยกสถิติรายเดือน