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

Cách đếm số ngày trong MySQL?

Sử dụng DATE() trích xuất ngày từ DATETIME, sau đó GROUP BY và SUM() để cộng dồn số lượng theo từng ngày.

Tạo bảng

mysql> CREATE TABLE DemoTable (ShippingDate DATETIME, CountOfDate INT);

Chèn dữ liệu (nhiều hàng cùng ngày)

mysql> INSERT INTO DemoTable VALUES('2018-01-31', 6), ('2016-12-01', 15), ('2016-12-01', 10), ('2016-12-01', 5), ('2019-04-09', 3), ('2018-01-31', 4), ('2019-04-09', 4);

Xem dữ liệu gốc

mysql> SELECT * FROM DemoTable;
+---------------------+-------------+
| ShippingDate        | CountOfDate |
+---------------------+-------------+
| 2018-01-31 00:00:00 | 6           |
| 2016-12-01 00:00:00 | 15          |
| 2016-12-01 00:00:00 | 10          |
| 2016-12-01 00:00:00 | 5           |
| 2019-04-09 00:00:00 | 3           |
| 2018-01-31 00:00:00 | 4           |
| 2019-04-09 00:00:00 | 4           |
+---------------------+-------------+

Tổng số lượng theo từng ngày

mysql> SELECT DATE(ShippingDate), SUM(CountOfDate) FROM DemoTable GROUP BY DATE(ShippingDate);
+--------------------+------------------+
| DATE(ShippingDate) | SUM(CountOfDate) |
+--------------------+------------------+
| 2018-01-31         | 10               |
| 2016-12-01         | 30               |
| 2019-04-09         | 7                |
+--------------------+------------------+

Giải thích

  • DATE(ShippingDate): Bỏ phần giờ, chỉ giữ ngày
  • GROUP BY DATE(ShippingDate): Gom hàng cùng ngày
  • SUM(CountOfDate): Cộng dồn giá trị CountOfDate trong mỗi nhóm

Mở rộng: Thêm thống kê khác

SELECT 
    DATE(ShippingDate) AS ShipDate,
    COUNT(*) AS Records,
    SUM(CountOfDate) AS TotalCount,
    AVG(CountOfDate) AS AvgCount,
    MIN(CountOfDate) AS MinCount,
    MAX(CountOfDate) AS MaxCount
FROM DemoTable
GROUP BY DATE(ShippingDate)
ORDER BY ShipDate;

Lưu ý hiệu năng

  • GROUP BY DATE(col) không dùng index trên col (function-based)
  • Tạo Generated Column: ShipDate DATE GENERATED ALWAYS AS (DATE(ShippingDate)) STORED + index
  • Hoặc lưu riêng cột DATE khi INSERT