【问题标题】:BigQuery conditional running sumBigQuery 条件运行总和
【发布时间】:2018-07-24 16:18:07
【问题描述】:

使用 SQL(标准 BigQuery),我需要计算标志为 FALSE 的最近 4 周销售的运行平均值。平均值实际上是一个基线,因此它不包括当周的销售额。

week    flag    sales
1       FALSE   3
2       FALSE   1
3       FALSE   3
4       FALSE   0
5       FALSE   3
6       FALSE   6
7       TRUE    3
8       TRUE    1
9       FALSE   3
10      FALSE   9
11      FALSE   6
12      FALSE   4
13      TRUE    4
14      TRUE    2
15      FALSE   1

例如,第 6 周有 (week2+week3+week+week5)/4=(1+3+0+3)/4=7/4=1.75。 例如,第 10 周,运行平均值不应包括第 7 周和第 8 周,因为 flag 为真。第 10 周应该是 (week4+week+5+week6+week9)/4=3

整张桌子应该喜欢

week    avg
1       NULL
2       NULL
3       NULL
4       NULL
5       1.75
6       1.75
7       3
8       3
9       3
10      3
11      5.25
12      6
13      5.5
14      5.5
15      5.5

我一直试图在这里增加答案 SQL Select Statement For Calculating A Running Average Column

谢谢, 吉姆

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    #standardSQL
    SELECT week,
      (SELECT IF(COUNT(1) = 4, AVG(sales), NULL) 
        FROM (
          SELECT sales FROM UNNEST(arr) WHERE NOT flag ORDER BY week DESC LIMIT 4
        ) 
      )
    FROM (
      SELECT week, ARRAY_AGG(STRUCT(week, flag, sales)) OVER(win) arr
      FROM `project.dataset.table` 
      WINDOW win AS (ORDER BY week ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
    )
    -- ORDER BY week 
    

    【讨论】:

      猜你喜欢
      • 2015-04-02
      • 2020-07-09
      • 1970-01-01
      • 2015-08-09
      • 2013-01-17
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      相关资源
      最近更新 更多