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

trả về Zeros cho Ngày không tồn tại MYSQL GROUP BY

Bạn thường đạt được loại điều này bằng cách THAM GIA với bảng giá trị , tức là một bảng chứa tất cả các giá trị mà bạn quan tâm.

Các bảng giá trị điển hình có thể chứa ví dụ như tất cả các giá trị nguyên từ 0 đến 1.000 hoặc tất cả các ngày trong một khoảng thời gian nhất định. Thường thì các bảng Giá trị bao gồm nhiều giá trị hơn mong muốn và chúng tôi có được kết quả chính xác mong muốn bằng cách thêm bộ lọc trong mệnh đề WHERE.

Trong trường hợp này, bạn sẽ yêu cầu một bảng chứa ngày tháng như vậy. Giả sử bảng này được đặt tên là ValTableDates và nó chứa tất cả các ngày từ tháng 1 năm 2005 đến tháng 12 năm 2010, truy vấn sẽ giống như sau:

SELECT AVG(data) AS data, VT.ValDate
FROM ValTableDates VT
LEFT JOIN  table T ON T.dateReg = VT.ValDate
WHERE VT.ValDate > [Some Start Date] and VT < [Some End Date]
GROUP BY YEAR(dateReg), MONTH(dateReg), DAY(dateReg) 
ORDER BY dateReg

Truy vấn trên có thể yêu cầu một chút tinh chỉnh để nhận giá trị Zero chứ không phải NULL, nhưng điểm chính là Bảng giá trị thường là cách đơn giản nhất để cung cấp bản ghi đầu ra cho các điểm dữ liệu bị thiếu.
Một giải pháp thay thế là sử dụng một hàm / biểu thức tạo ra chuỗi [ngày] mong muốn, bên trong một truy vấn con, nhưng điều này thường kém hiệu quả hơn và dễ xảy ra lỗi hơn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách triển khai một lệnh sql phức tạp

  2. Trình điều khiển jdbc org.gjt.mm.mysql.Driver để làm gì?

  3. Kết nối ứng dụng web trên vùng chứa tomcat với vùng chứa mysql qua chế độ ngủ đông

  4. Lệnh thực thi mệnh đề / truy vấn MySQL

  5. Giao tiếp cơ sở dữ liệu Android và Mysql