我想在过去12个月内从数据库表中获取记录。这是我到目前为止所尝试的内容。
SELECT COUNT(s.id), date_part('month', s.viewed_at) month_number
FROM statistics_maps_view as s
INNER JOIN maps as m
ON s.maps_id=m.id Where m.users_id = $users_id group by month_number ORDER BY month_number DESC LIMIT 12
我知道它会按月分组记录。但如果某个月没有记录,有没有办法添加Count = 0
?
答案 0 :(得分:3)
如您所见,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