group by
klausul kommer inte att skapa poster där det inte finns några data, som du har sett. Vad du kan göra är att left join
Hela detta resultat med en annan resultatuppsättning som har alla poster du vill ha - t.ex. en du dynamiskt genererar med 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