group by
klausa tidak akan membuat entri di mana tidak ada data, seperti yang Anda lihat. Yang dapat Anda lakukan adalah left join
seluruh hasil ini dengan kumpulan hasil lain yang memiliki semua entri yang Anda inginkan - mis., entri yang Anda buat secara dinamis dengan 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