在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
没有任何订单记录,因此计数列将显示"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"
提前感谢您的帮助。
答案 0 :(得分: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来获取第一个和最后一个日期值。
答案 1 :(得分: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;