2014-01-19 3 views
0

Postgres에서 나는 총계를 집계하여 일을 분리 한 다음 그 데이터를 차트로 덤핑합니다. 예 쿼리는 다음과 같습니다Postgres 집계 할 때 빈 데이터 채우기

SELECT 
EXTRACT(YEAR FROM post_created_date) as report_year, EXTRACT(WEEK FROM post_created_date) AS regweek, COUNT(post_id) as post_count 
FROM TableA 
GROUP BY report_year, regweek 

이 잘 작동하지만 어떤 일에

1/14 - 5 
1/15 - 7 
1/18 - 4 

이 어떻게 또한, 이벤트 보고서 0이없는 날짜를 포함 할 수 있습니다 차트 격차를 제공, 데이터가없는 그 데이트?

+1

_calendar 테이블이 필요합니다 (이것은'generate_series()'에 의해 즉시 생성 될 수 있습니다) – wildplasser

답변

1

이 목적으로 left outer join을 사용해야합니다. 아이디어는 연도와주의 모든 조합을 만든 다음 쿼리에 참여하는 것입니다. Postgres에서는 매우 편리합니다. generate_series(). 다음과 같은 것 :

select yw.yr, yw.wk, coalesce(r.post_count, 0) as post_count 
from (select distinct EXTRACT(YEAR FROM post_created_date) as yr, 
      generate_series(1, 52) as wk 
     from TableA 
    ) yw left outer join 
    (SELECT EXTRACT(YEAR FROM post_created_date) as report_year, 
      EXTRACT(WEEK FROM post_created_date) AS regweek, COUNT(post_id) as post_count 
     FROM TableA 
     GROUP BY report_year, regweek 
    ) r 
    on yw.yr = report_year and yw.wk = regweek;