按月分组,如果没有记录则返回0。

4
我想从数据库表中获取过去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

1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接