我写了一个查询来检索我每天有多少网站注册:
SELECT created, COUNT(id) FROM signups GROUP BY created ORDER BY created desc
但是,这只会检索人们实际注册了几天的行。如果一天没有人签约,那么我想当天返回0。有没有办法使用SQL做到这一点,还是我必须使用PHP解析结果?
假设created是date缺乏信息的类型。
created
date
Postgres提供了简化 generate_series() 此过程的妙处:
generate_series()
SELECT d.created, COUNT(s.id) AS ct FROM ( SELECT generate_series(min(created) , max(created), interval '1 day')::date AS created FROM signups ) d LEFT JOIN signups s USING (created) GROUP BY 1 ORDER BY 1 DESC;
这会自动从您的表格中检索最短和最长的一天,并且每天之间提供一行。