在 postgresql 中重复一个查询,该查询在某个日期范围内返回多个列



如果我有这样一个名为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

最新更新