2015-08-29 77 views
4

我想从过去12个月的数据库表中提取记录。这是我到目前为止所尝试的。按月分组,如果没有找到记录,则返回0

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

回答

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 
相关问题