2015-08-29 76 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 
相關問題