Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Truy vấn MySQL nhóm kết quả theo ngày và đếm số lượng trùng lặp

Khi cần thống kê số lần xuất hiện của một mã (ví dụ: mã hành khách) theo từng ngày, hãy kết hợp DATE() để trích xuất phần ngày từ DATETIME, GROUP BY và COUNT().

Cú pháp

SELECT DATE(ten_cot_datetime), COUNT(*)
FROM ten_bang
WHERE dieu_kien_loc
GROUP BY DATE(ten_cot_datetime);

Ví dụ minh họa

Tạo bảng lịch trình hành khách:

mysql> CREATE TABLE DemoTable1496 (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> PassengerCode VARCHAR(20),
    -> ArrivalDate DATETIME
    -> );

Chèn dữ liệu (mã '202' xuất hiện nhiều lần, cùng và khác ngày):

mysql> INSERT INTO DemoTable1496(PassengerCode, ArrivalDate) VALUES
    -> ('202', '2013-03-12 10:12:34'),
    -> ('202_John', '2013-03-12 11:00:00'),
    -> ('204', '2013-03-12 10:12:34'),
    -> ('208', '2013-03-14 11:10:00'),
    -> ('202', '2013-03-18 12:00:34'),
    -> ('202', '2013-03-18 04:10:01');

Truy vấn: nhóm theo ngày, chỉ lấy mã chứa '202', đếm số lần đến mỗi ngày:

mysql> SELECT DATE(ArrivalDate), COUNT(ArrivalDate)
    -> FROM DemoTable1496
    -> WHERE PassengerCode LIKE CONCAT('%', '202', '%')
    -> GROUP BY DATE(ArrivalDate);

Kết quả:

+-------------------+--------------------+
| DATE(ArrivalDate) | COUNT(ArrivalDate) |
+-------------------+--------------------+
| 2013-03-12        |                  2 |
| 2013-03-18        |                  2 |
+-------------------+--------------------+

Giải thích

  • DATE(ArrivalDate) lấy phần ngày (bỏ giờ phút giây).
  • LIKE CONCAT('%', '202', '%') tìm mã chứa chuỗi '202' (khớp '202', '202_John', v.v.).
  • GROUP BY DATE(ArrivalDate) gom nhóm theo ngày.
  • COUNT(ArrivalDate) đếm số hàng trong mỗi nhóm.

Mẹo: Nên tạo index trên (PassengerCode, ArrivalDate) để tăng tốc truy vấn trên bảng lớn.