Nhóm group by
mệnh đề sẽ không tạo các mục nhập không có dữ liệu, như bạn đã thấy. Những gì bạn có thể làm là left join
toàn bộ kết quả này với một tập hợp kết quả khác có tất cả các mục bạn muốn - ví dụ:một mục bạn tạo động với generate_series
:
SELECT generate_series AS month_number, cnt
FROM GENERATE_SERIES(1,12) g
LEFT JOIN (SELECT COUNT(s.id) AS cnt,
DATE_PART('month', s.viewed_at) AS month_number
FROM statistics_maps_view s
INNER JOIN maps m ON s.maps_id = m.id
WHERE m.users_id = $users_id
GROUP BY month_number) s ON g.generate_series = s.month_number
ORDER BY 1 ASC