PostgreSQL -统计天数并显示无数据天数

hc2pp10m  于 2022-12-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(180)

类似的问题已经有了,但我不明白如何将我的情况与过去的例子联系起来。
我需要显示一段时间的数据。而且,如果值为零,那么这个数据也必须存在。我知道这可以通过LEFT JOIN来完成。但是如何做还不清楚。
现在我的问题是这样的:

SELECT date_trunc('day', to_timestamp(created_at)) as "Interval", COUNT(*) as "Number" FROM public.surmise 
where
GROUP BY 1 ORDER BY 1

我得到:

January 1 - 10
January 3 - 20
January 10 - 5

我希望:

January 1 - 10
January 2 - 0
January 3 - 20
January 4 - 0
... 'other days with 0'
January 10 - 5

提前感谢您的帮助

eqoofvh9

eqoofvh91#

您需要一个没有间隔的所有日期的列表(generate_series),然后从该列表left join中选择您的表,以便所有日期都包含在结果中。请注意,结果是正确的,因为COUNT(s.created_at)不计算空值。

SELECT date_trunc('day', to_timestamp(s.created_at)) as "Interval",
   COUNT(s.created_at) as "Number" 
FROM 
  generate_series('2022-01-01', '2022-01-10', interval '1 day') as gs(d) 
  left outer join public.surmise s on s.created_at::date = gs.d::date
GROUP BY 1 ORDER BY 1;

相关问题