如果我有一个名为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
答案 0 :(得分:1)
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