admin

检索行数,如果没有行则返回0

sql

我写了一个查询来检索我每天有多少网站注册:

SELECT created, COUNT(id)
FROM signups
GROUP BY created
ORDER BY created desc

但是,这只会检索人们实际注册了几天的行。如果一天没有人签约,那么我想当天返回0。有没有办法使用SQL做到这一点,还是我必须使用PHP解析结果?


阅读 230

收藏
2021-07-01

共1个答案

admin

假设createddate缺乏信息的类型。

Postgres提供了简化
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;

这会自动从您的表格中检索最短和最长的一天,并且每天之间提供一行。

2021-07-01