首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每周Postgres条目,每周

每周Postgres条目,每周
EN

Stack Overflow用户
提问于 2014-03-01 21:11:42
回答 2查看 3.1K关注 0票数 4

我想返回每个日历周的每周条目数。我当前的代码:

代码语言:javascript
复制
SELECT COUNT(*) AS count, date_trunc('week', occured_on) AS week
from incidents
GROUP BY date_trunc('week', occured_on)
ORDER BY date_trunc('week', occured_on);

这将返回:

代码语言:javascript
复制
count  |        week         
-------+---------------------
     1 | 2009-09-28 00:00:00
     2 | 2009-10-19 00:00:00
     6 | 2009-10-26 00:00:00
     3 | 2009-11-02 00:00:00
     6 | 2009-11-09 00:00:00
    22 | 2009-11-16 00:00:00

跳过未发生任何事件的一周。如何获得该周的计数0,从而显示每个日历周的条目总数,而不是每周发生的事件?

EN

回答 2

Stack Overflow用户

发布于 2014-03-01 21:20:26

您可以通过生成一系列周,然后在聚合之前使用left join来完成此操作。下面的代码使用CTE生成序列。这不是必需的,但我认为它显示了所使用的逻辑:

代码语言:javascript
复制
with dates as (
      select min(date_trunc('week', occured_on)) as startw,
             max(date_trunc('week', occured_on)) as endw
      from incidents
     ),
     weeks as (
      select generate_series(startw, endw, '7 days') as week
      from dates
     )
select w.week, count(i.occured_on)
from weeks w left outer join
     incidents i
     on date_trunc('week', i.occured_on) = w.week
group by w.week;

SQL Fiddle是here

票数 12
EN

Stack Overflow用户

发布于 2014-03-01 21:20:25

代码语言:javascript
复制
SELECT  my_weeks.week_number  AS week , IFNULL(i.count,0)
from 
(
 SELECT generate_series (1,54,1) AS week_number
) my_weeks
LEFT OUTER JOIN 
(
  SELECT COUNT(*) AS count, date_trunc('week', occured_on) AS week
  from incidents
  GROUP BY date_trunc('week', occured_on)
) i
ON my_weeks.week_number = i.week
ORDER BY my_weeks.week_number ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22114824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档