【问题标题】:Group by Month, return 0 if no record found按月份分组,如果没有找到记录则返回 0
【发布时间】:2015-08-29 08:56:59
【问题描述】:

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

【问题讨论】:

    标签: sql postgresql select


    【解决方案1】:

    正如您所见,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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2014-09-20
      • 2016-11-28
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多