Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn Mysql để có được số lượng mỗi tháng

Nếu được tạo là trường INT, bạn nên sử dụng FROM_UNIXTIME hàm để chuyển đổi nó thành một trường ngày tháng và sau đó THÁNG hàm trích xuất tháng:

SELECT Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Month(FROM_UNIXTIME(created))

điều này sẽ đếm tất cả các hàng đã được tạo trong 12 tháng qua. Xin lưu ý rằng có lẽ tốt hơn là nên phân nhóm theo NĂM:

SELECT Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created))

Nếu bạn cần đếm số lượng đăng ký thay vì các hàng, bạn có thể sử dụng một cái gì đó như

COUNT(registration_number)

để bỏ qua giá trị null hoặc

COUNT(DISTINCT registration_number)

chỉ đếm những cái riêng biệt.

Chỉnh sửa

Nếu bạn cũng cần hiển thị các tháng có số đếm =0, tôi sẽ sử dụng truy vấn như thế này trả về tất cả các tháng cho hiện tại và cho năm trước:

SELECT y, m
FROM
  (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
  (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
    UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
    UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months;

Và sau đó tôi sẽ sử dụng LEFT JOIN, trả về tất cả các hàng của truy vấn đầu tiên và chỉ các hàng của truy vấn thứ hai phù hợp với:

SELECT y, m, Count(yourtable.created)
FROM (
  SELECT y, m
  FROM
    (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
    (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
      UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
      UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym
  LEFT JOIN yourtable
  ON ym.y = YEAR(FROM_UNIXTIME(yourtable.created))
     AND ym.m = MONTH(FROM_UNIXTIME(yourtable.created))
WHERE
  (y=YEAR(CURDATE()) AND m<=MONTH(CURDATE()))
  OR
  (y<YEAR(CURDATE()) AND m>MONTH(CURDATE()))
GROUP BY y, m

(xin lưu ý rằng ở đây tôi chỉ đang xem xét 12 tháng qua, vì vậy nếu chúng ta đang ở giữa tháng 4 năm 2013, nó sẽ tính các hàng trong khoảng tháng 5 năm 2012 - ngày 13 tháng 4, nếu đây không phải là hành vi chính xác, vui lòng cho tôi biết)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn giá trị mặc định làm ngày hiện tại + 30 ngày trong MySQL

  2. Truy vấn SQL với dữ liệu nhị phân (PHP và MySQL)

  3. Làm cách nào để chèn dữ liệu vào bảng Hive (0.13.1)?

  4. Tôi có nên sử dụng NULL hay một chuỗi trống để biểu thị không có dữ liệu trong cột bảng không?

  5. xóa thông tin khỏi bảng mysql khi người dùng đóng Trình duyệt của mình