group by
क्लॉज ऐसी प्रविष्टियाँ नहीं बनाएगा जहाँ कोई डेटा नहीं है, जैसा कि आपने देखा है। आप क्या कर सकते हैं left join
यह संपूर्ण परिणाम एक और परिणाम सेट के साथ है जिसमें आपकी इच्छित सभी प्रविष्टियां हैं - उदाहरण के लिए, एक जिसे आप गतिशील रूप से 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