PostgreSQL查询按日计数/分组,显示没有数据的天数

我需要创建一个Postgresql返回的查询

>一天
>找到的对象的数量

重要的是,每一天都会出现在结果中,即使当天没有找到对象。 (这已经讨论过,但我没能得到的东西在我的具体情况下工作。)

首先,我发现了一个sql query to generate a range of days,我可以加入:

SELECT to_char(date_trunc('day',(current_date - offs)),'YYYY-MM-DD')
AS date 
FROM generate_series(0,365,1) 
AS offs

结果是:

date    
------------
 2013-03-28
 2013-03-27
 2013-03-26
 2013-03-25
 ...
 2012-03-28
(366 rows)

现在我试图加入一个名为“sharer_emailshare”的表,它有一个’已创建’列:

Table 'public.sharer_emailshare'
column    |   type  
-------------------
id        | integer
created   | timestamp with time zone
message   | text
to        | character varying(75)

这里是最好的GROUP BY查询我到目前为止:

SELECT d.date,count(se.id) FROM (
    select to_char(date_trunc('day','YYYY-MM-DD')
    AS date 
    FROM generate_series(0,1) 
    AS offs
    ) d 
JOIN sharer_emailshare se 
ON (d.date=to_char(date_trunc('day',se.created),'YYYY-MM-DD'))  
GROUP BY d.date;

结果:

date    | count 
------------+-------
 2013-03-27 |    11
 2013-03-24 |     2
 2013-02-14 |     2
(3 rows)

所需结果:

date    | count 
------------+-------
 2013-03-28 |     0
 2013-03-27 |    11
 2013-03-26 |     0
 2013-03-25 |     0
 2013-03-24 |     2
 2013-03-23 |     0
 ...
 2012-03-28 |     0
(366 rows)

如果我理解正确,这是因为我使用一个简单的(隐含的INNER)JOIN,这是预期的行为,如discussed in the postgres docs

我已经查看了几十个StackOverflow解决方案,所有具有工作查询查询似乎特定于MysqL / Oracle / MSsql,我很难将它们转换为Postgresql

询问this question的家伙找到了他的答案,与Postgres,但把它放在一个pastebin链接过期了一段时间前。

我试图切换到LEFT OUTER JOIN,RIGHT JOIN,RIGHT OUTER JOIN,CROSS JOIN,使用CASE语句在另一个值子集如果null,COALESCE提供认值等,但我还没能使用它们的方式,让我得到我所需要的。

任何援助赞赏!我承诺我很快就会读到这本庞大的Postgresql书籍;)

你只需要一个左外连接而不是内连接:
SELECT d.date,count(se.id)
FROM (SELECT to_char(date_trunc('day','YYYY-MM-DD') AS date 
      FROM generate_series(0,1) AS offs
     ) d LEFT OUTER JOIN
     sharer_emailshare se 
     ON d.date = to_char(date_trunc('day','YYYY-MM-DD'))  
GROUP BY d.date;

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...