如果我有这样一个名为orders
的表:
id date value client_name
1 01/02/2017 50 Name 1
2 02/02/2017 60 Name 2
3 02/02/2017 60 Name 2
4 03/02/2017 20 Name 2
还有一个查询,它让我了解给定日期的订单的详细信息:
Select
sum(value) as total_order_value,
count(id) as number_of_orders
from orders
where orders.date = '02/03/2017'::date
有没有办法构造一个查询,该查询将为一系列日期执行该查询,为每个执行的日期提供一行?
我过去使用过这样的东西:
select date(a),
(SUB QUERY WHICH RETURNS A SINGLE VALUE)
FROM generate_series(
(CURRENT_DATE - interval '2 months')::date,
CURRENT_DATE,
'1 day'
) s(a)
但这仅在子查询返回单个值时才有效。我正在寻找一种在子查询返回多个列时执行此操作的方法(例如上面的第一个示例(。
因此,从上面的第一个示例中,将生成结果集的查询:
date total_order_value number_of_orders
01/02/2017 50 1
02/02/2017 120 2
03/02/2017 20 1
04/02/2017 0 0
05/02/2017 0 0
etc
generate_series
的外部联接将包括没有订单的天数
select
d::date,
sum(value) as total_order_value,
count(id) as number_of_orders
from
orders
right join
generate_series(
(current_date - interval '2 months')::date,
current_date,
'1 day'
) gs (d) on d = orders.date
group by d