Điều này thực sự khó thực hiện trong SQL. Một cách để làm điều đó là có một câu lệnh chọn dài với UNION ALLs để tạo ra các số từ 1 đến 31. Điều này thể hiện nguyên tắc nhưng tôi dừng lại ở 4 cho rõ ràng:
SELECT MonthDate.Date, COALESCE(SUM(`values`), 0) AS Total
FROM (
SELECT 1 AS Date UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
--
SELECT 28 UNION ALL
SELECT 29 UNION ALL
SELECT 30 UNION ALL
SELECT 31) AS MonthDate
LEFT JOIN Table1 AS T1
ON MonthDate.Date = DAY(T1.Date)
AND MONTH(T1.Date) = 1 AND YEAR(T1.Date) = 2010
WHERE MonthDate.Date <= DAY(LAST_DAY('2010-01-01'))
GROUP BY MonthDate.Date
Có thể tốt hơn nếu sử dụng một bảng để lưu trữ các giá trị này và thay vào đó kết hợp với nó.
Kết quả:
1, 34
2, 10
3, 0
4, 7