在BigQuery中组合窗口和聚合函数

时间:2015-08-17 13:11:01

标签: google-bigquery

以下查询:

select
  corpus_date
  ,sum(count(*)) over (partition by corpus_date) as words_year
  ,corpus
  ,count(*) as words

  from [publicdata:samples.shakespeare]

group by
  corpus_date
  ,corpus

order by
  corpus_date

导致错误消息SELECT * cannot be combined with selecting other fields or expressions.现在我想知道我是否错过了一个明显的错误,或者BigQuery是否真的不允许组合窗口和聚合函数。我还没有在文件中找到答案。错误消息不会产生任何搜索结果,并且在任何情况下都不合适。

(我此处仅使用莎士比亚数据库进行复制。)

编辑:显然可以通过子选择获得所需的结果,如下所示:

select
  corpus_date
  ,sum(words) over (partition by corpus_date) as words_year
  ,corpus
  ,words

  from (select
          corpus_date
          ,corpus
          ,count(*) as words

          from [publicdata:samples.shakespeare]

       group by
          corpus_date
          ,corpus
       ) sub

order by
   corpus_date

所以我应该澄清一下,我的问题只是是否有人可以证实这种意外行为。

EDIT2:显然它也不可能直接(即没有吸引另一个子选择)在计算中使用窗口函数的结果:-(:

select
  corpus
  ,corpus_date
  ,words
  ,1.*words/sum(words) over (partition by corpus_date) as perc_of_year

  from (select
          corpus_date
          ,corpus
          ,count(*) as words

          from [publicdata:samples.shakespeare]

       group by
          corpus_date
          ,corpus
       ) sub

order by
   corpus_date
   ,corpus

0 个答案:

没有答案