在BigQuery中计算分区的运行总和

时间:2013-11-27 23:43:30

标签: google-bigquery

我试图计算分区上的运行总和。这似乎比BigQuery SQL running totals中建议的方法更容易,更快捷。

例如:

  

SELECT corpus,corpus_date,word_count,         sum(word_count)over(由corpus分区,corpus_date order by word_count,word DESC)as running_sum   从      [publicdata:samples.shakespeare]

我面临两个问题:

  1. 我无法让总和以最常见的单词(具有最高word_count的单词)开头。设置DESC或ASC只是不会改变任何东西,并且总和从最不常见的单词开始。如果我改变订单只包括"按word_count排序"而且运行总和不正确,因为具有相同顺序(==相同word_count)的行产生相同的运行总和。

  2. 在我执行的类似查询中(见下文),运行总和的第一行产生的总和为0,尽管第一行的字段I总和不是0 。为什么会这样?如何解决问题以显示正确的运行总和?查询是:

  3.   

    从中选择*   (选择
      mongo_id,
      account_id,
      event_date,
      trx_amount_sum_per_day,
      SUM(trx_amount_sum_per_day)OVER(由mongo_id分配,account_id ORDER BY event_date DESC)AS running_sum,
      ROW_NUMBER()OVER(由mongo_id分配,account_id ORDER BY event_date DESC)AS row_num
      FROM [xs-polar-gasket-4:publicdataset.publictable]
      )按event_date desc的顺序

1 个答案:

答案 0 :(得分:7)

问题1:

变化:

SELECT
  corpus, corpus_date, word_count, SUM(word_count)
OVER
  (PARTITION BY corpus, corpus_date
  ORDER BY word_count, word DESC) AS running_sum
FROM [publicdata:samples.shakespeare]

要:

SELECT
  corpus, corpus_date, word_count, SUM(word_count)
OVER
  (PARTITION BY corpus, corpus_date
  ORDER BY word_count DESC, word) AS running_sum
FROM [publicdata:samples.shakespeare]

(原始查询按字词排序,但您想按word_count排序)