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

前端之家收集整理的这篇文章主要介绍了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;
原文链接:https://www.f2er.com/postgresql/193510.html

猜你在找的Postgre SQL相关文章