【问题标题】:Postgres calculate growth rate over two monthPostgres 计算两个月内的增长率
【发布时间】:2015-08-18 02:15:45
【问题描述】:

我想为以下数据计算客户的增长率。​​p>

 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 个月为间隔的增长率,而不是仅单月。在上述数据中,将两个月的结果相加,并按两个月而不是按月分组

【问题讨论】:

标签: postgresql


【解决方案1】:

仍然不确定第二部分。以下是您调整后的查询和两个月的增长列的增长:

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;

基本上答案是使用 generate_series

【讨论】:

  • 第二点是:我想产生两个月分组的增长率而不是一个月就这样,第一点和第二点是不同的而且它们确实在增长期方面有所延迟,首先我有一个月期间,而在 second 中则替换为 twon 月
  • 在上面的结果图像中,您显示第 4 个月和第 5 个月的总数为 21,应该是 0,你不觉得吗?第一个月我有 1 个客户,第二个月我有 10 个类似的客户,因为我有 10 个客户,第三个月但似乎你和前一个有总和,你能解释一下你的查询吗?
  • total 在我的查询中是客户总数 - 为什么不增长时它会下降到零?.. 增长又下降了...... @ram 让我们换一种方式 - 把桌子对你的问题有预期的结果:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多