1

PostgreSQL 中的新手。

我有一些 SQL,它基本上列出了从2/4/2013到的日期序列10/7/2013。例如:

select date(generate_series(DATE '20130402', DATE '20131007', interval '1' day))

输出:

"2013-04-02"
"2013-04-03"
"2013-04-04"
"2013-04-05"
"2013-04-06"

然后我从myorder表中得到另一个 SQL:

select date(date_created) as date_created1, count(id) from myorder group by date_created1 order by date_created1 desc

输出:

"2013-08-12;2"
"2013-08-08";1"
"2013-08-02";1"
"2013-08-01";1"

基本上,这显示了每天的总订单量。

我的问题是如何将第一个 SQL 链接到第二个 SQL,以便它按顺序输出日期和计数(按日期排序)。此外,如果在“myorder”表中没有找到订单,它将显示“0”。

例如:

2013-08-11没有任何订单记录,所以count栏会显示"0"

更不像这样:

"2013-08-12;2"
"2013-08-11;0"
"2013-08-10;0"
"2013-08-09;0"
"2013-08-08;1"
"2013-08-02;1"
"2013-08-01;1"

提前感谢您的帮助。

4

2 回答 2

1

我认为使用 CTE 会使事情更容易阅读——但这当然是个人选择:

with all_dates as (
  select d::date as 
  from generate_series(DATE '2013-04-02', DATE '2013-10-07', interval '1' day) d
) 
select ad.d,
       count(mo.id) as order_count
from all_dates ad
  left join myorder mo on mo.date_created = ad.d
group by ad.d
order by ad.d;
于 2013-10-08T15:31:02.907 回答
1

只需加入两者,如下所示:

SELECT dt.d AS date_created1, count(m.id)
FROM
    (
    SELECT date(d)
        FROM generate_series(
            DATE '20130402', DATE '20131007', interval '1' day
        ) AS d
    ) AS dt
    LEFT JOIN myorder m ON m.date_created = dt.d
GROUP BY date_created1
ORDER BY date_created1 DESC

您还可以使用 min/max 来获取第一个和最后一个日期值。

于 2013-10-08T02:31:50.370 回答