Postgres计算两个月以上的增长率

时间:2015-08-18 02:15:46

标签: postgresql

我想计算客户对以下数据的增长率。

 month         | customers
-------------------------
01-2015        |   1
02-2015        |   10
03-2014        |   10
06-2015        |   15

我使用以下公式来计算增长率,它仅适用于一个月的间隔,并且由于第3个月和第6个月之间的差距而无法给出预期的产出,如上表所示

select
    month, total,
    (total::float / lag(total) over (order by month) - 1) * 100 growth
from (
    select to_char(created, 'yyyy-mm') as month, count(id) total
    from customers
    group by month
) s
order by month;

我认为可以通过按该范围创建日期范围和组来完成。

我预计两个主要输出分开 1)产生增长率,确切的一个月差异 2)增长率,间隔2个月而不是单个月。在上面的数据中,将两个月的结果和分组相加两个月而不是一个月

1 个答案:

答案 0 :(得分:0)

仍然不确定第二部分。从您的改编查询和两个月增长列开始增长:

select
    month, total,
    (total::float / lag(total) over (order by m) - 1) * 100 growth,m,m2
from (
    select created, (sum(customers) over (order by m))::float total,customers,m,m2,to_char(created, 'yyyy-mm') as month
    from customers c
    right outer join (
        select generate_series('2015-01-01','2015-06-01','1 month'::interval) m
    ) m1 on m=c.created
    left outer join (
        select generate_series('2015-01-01','2015-06-01','2 month'::interval) m2
    ) m2 on m2=m
    order by m
) s
order by m;

enter image description here

基本上答案是使用generate_series