【问题标题】:Calculating running sum over partition in BigQuery在 BigQuery 中计算分区的运行总和
【发布时间】:2013-12-13 20:25:56
【问题描述】:

我正在尝试计算分区上的运行总和。这似乎比BigQuery SQL running totals 中建议的方法更简单快捷。

例如:

选择语料库,语料库_日期,字数, sum(word_count) over (partition by corpus,corpus_date order by word_count,word DESC) as running_sum 从 [publicdata:samples.shakespeare]

我面临两个问题:

  1. 我无法让总和从最常见的单词(word_count 最高的单词)开始。设置 DESC 或 ASC 不会改变任何东西,并且总和从最不常见的单词开始。如果我将 order by 更改为仅包含“order by word_count”,则运行总和不正确,因为具有相同顺序(==相同 word_count)的行产生相同的运行总和。

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


中选择* (选择
mongo_id,
帐户 ID,
事件日期,
trx_amount_sum_per_day,
SUM (trx_amount_sum_per_day) OVER (PARTITION BY mongo_id,account_id ORDER BY event_date DESC) AS running_sum,
ROW_NUMBER() OVER (PARTITION BY mongo_id,account_id ORDER BY event_date DESC) AS row_num
FROM [xs-polar-gasket-4:publicdataset.publictable]
) 按 event_date desc 排序

【问题讨论】:

  • 加快问题 2:您可以与数据样本共享公共数据集吗?
  • 我分享了数据。有关有问题的查询,请参阅修订后的问题 2
  • 感谢分享 - 事实上,对于问题 2,有一些事情需要进一步调查(内部报告)
  • 能否请您在相关时更新此问题的状态?
  • OVER、PARTITION 和浮动实际上存在问题 - 正在修复中(感谢报告!)。当修复程序投入生产时,一种解决方法是转换为整数,如:SELECT SUM(INTEGER(ROUND(x))) OVER(PARTITION BY y ORDER BY o)

标签: google-bigquery


【解决方案1】:

对于问题 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排序)

【讨论】:

    猜你喜欢
    • 2022-10-14
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2015-12-18
    • 2013-01-17
    相关资源
    最近更新 更多