【问题标题】:SQL BigQuery : Calculate Value per time periodSQL BigQuery:计算每个时间段的值
【发布时间】:2018-08-04 08:09:17
【问题描述】:

我是 BigQuery 上的 SQL 新手,我在一个必须编译的项目上被阻止了。

我被要求在一个甚至没有汇总收入的数据库中查找销售额的同比增长百分比...我知道我必须收集各种请求,但不知道如何计算销售额的增长。

这里是我所在的位置:

有没有人知道如何做到这一点?

非常感谢!

【问题讨论】:

  • 一些提示(虽然不是一个实际的答案):如果可以的话,尽量使用标准 SQL 而不是旧版 SQL,因为它具有更多功能,并且对财务数据使用 NUMERIC 类型,以便对数字求和时不会丢失精度。

标签: sql google-bigquery


【解决方案1】:

(1)从现有的情况开始,按产品线分组,得到每一行今年和去年的收入:

#standardsql
with yearly_sales AS (
select year, product_line, sum(revenue) as revenue
from `dataset.sales`
group by product_line, year
),

year_on_year AS (
select array_agg(struct(year, revenue))
            OVER(partition by product_line ORDER BY year
                 RANGE BETWEEN PRECEDING AND CURRENT ROW) AS data
from yearly_sales
)

(2) 根据您现在每行中的两个值计算同比增长

【讨论】:

    【解决方案2】:

    以下是 BigQuery 标准 SQL

    #standardSQL
    SELECT product_line, year, revenue, prev_year_revenue, 
      ROUND(100 * (revenue - prev_year_revenue)/prev_year_revenue) year_over_year_growth_percent
    FROM (
      SELECT product_line, year, revenue, 
        LAG(revenue) OVER(PARTITION BY product_line ORDER BY year) prev_year_revenue
      FROM (
        SELECT product_line, year, SUM(revenue) revenue
        FROM `project.dataset.table`
        GROUP BY product_line, year
      )
    )
    -- ORDER BY product_line, year
    

    【讨论】:

      【解决方案3】:

      我尝试了您的信息(加上我为 2007 年编造的数据),然后我来到了这里:

      SELECT
        year,
        sum(revenue) as year_sum
      FROM
        YearlyRevenue.SportCompany
      GROUP BY
        year
      ORDER BY 
        year_sum
      

      谁的结果是:

      R 年 year_sum
      1 2005 1.159E9
      2 2006 1.4953E9
      3 2007 1.5708E9

      现在应该添加增长百分比。看看here 以获得灵感。

      如果您没有成功,请告诉我,我会尽力而为,但不保证。

      【讨论】:

        猜你喜欢
        • 2015-04-09
        • 1970-01-01
        • 2015-12-26
        • 1970-01-01
        • 2021-02-18
        • 1970-01-01
        • 2019-06-22
        • 2020-03-02
        • 1970-01-01
        相关资源
        最近更新 更多