【问题标题】:Month on month growth for a region and city一个地区和城市的环比增长
【发布时间】:2017-09-19 19:54:47
【问题描述】:

我有一个格式如下的表格 -

region  country   revenue  datetime
apac     japan     1000    2002-01-01
apac     china     2000    2001-02-01
apac     japan     1500    2001-01-01
apac     china     3000    2002-02-01
emea     germany   4000    2003-04-01
emea     france    5000    2004-09-01
emea     germany   2000    2004-04-01
emea     france    6000    2005-09-01

我正在尝试编写一个查询,该查询将给出每个地区和县的月度增长

我在 postgres 中使用 datetrunc('month',datetime) 和 lag() 函数来获取以前的值,但无法按地区和国家分组 - 当我这样做时,表格的粒度会发生变化我没有得到想要的输出。

下面是查询 -

select  region,
country,
  date_trunc('month',datetime) as datum,
  sum(revenue),
         round(1.0-(cast(revenue as NUMERIC)/lag(revenue,1) OVER())*100,1)
from mytable
  GROUP BY datum,region,country,revenue
ORDER BY datum ASC;

【问题讨论】:

    标签: sql postgresql lag window-functions


    【解决方案1】:

    你需要partition by:

    select region, country,
           date_trunc('month', datetime) as datum,
           sum(revenue),
           round(1.0-(cast(revenue as NUMERIC)/lag(sum(revenue), 1) over (partition by region, country order by date_trunc('month',datetime)))*100,1)
    from mytable
    group by datum, region, country
    order by datum asc;
    

    另外,revenue 不应该在 group by 中。

    或者,这更容易通过先进行聚合来表达:

    select region, county, datum, rev, 
           lag(rev) over (partition by region, country order by datum) as prev_rev
    from (select region, country,
                 date_trunc('month', datetime) as datum,
                 sum(revenue) as rev
          from mytable
          group by datum, region, country
         ) drc
    order by datum asc;
    

    【讨论】:

    • 当我从 group by 子句中删除收入时,它说必须在 group by 错误中使用收入。使用 postgres @Gordon Linoff
    • @Firstname 。 . .我已经修改了答案。
    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多