【问题标题】:BigQuery Over and Analytics FunctionsBigQuery Over 和分析功能
【发布时间】:2018-01-19 17:21:45
【问题描述】:

我正在尝试编写一个利用 BigQuery 的“结束”功能的 SQL。

我本质上是在尝试做一些复合和更平滑的回报,但我遇到了一些常规。我的查询如下所示:

WITH daily_extract AS (select date_adjusted,
                              sum(some_number) as 
                              daily_sum_of_some_number,
                              entity_id
                       from `some table`
                       where 1=1 -- no filter  
                       and   1=1 -- no filter  
                       group by date_adjusted, entity_id
                       order by date_adjusted
                       )
      select
      date_adjusted as date_adjusted,
      entity_id as entity_id,
      sum(log(1 + daily_sum_of_some_number)) 
          over (PARTITION by entity_id 
                ORDER     by date_adjusted 
                rows unbounded preceding) as smoothed_number
      from daily_extract
      group by 1,2

但我得到的是这样的错误:

未能检索到数据 - SELECT 列表表达式引用列 daily_sum_return_selected_nav,该列在 [16:19] 时既未分组也未汇总。

我试图在底部说按 1、2、3 分组,但随后出现错误:

检索数据失败 - 第 3 列包含一个分析函数,该函数在 [18:20] 的 GROUP BY 中是不允许的

我正在阅读下面的链接,但如果有人可以帮助我,将不胜感激!

https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#analytic-functions

【问题讨论】:

  • 这有点令人困惑,因为您混淆了列 - 但不是错误,但在外部查询中,您的列 a) 不属于聚合函数或 b) 未分组。 daily_sum_return_selected_nav 在哪里使用?如果未聚合,则必须在 group by 中。

标签: sql google-bigquery


【解决方案1】:

我可以很容易地看到至少三个问题。您的 CTE 通过错误的列进行聚合,不需要窗口框架子句,并且您在外部查询中缺少聚合。

您可能还有其他问题,但这可能会有所帮助:

with daily_extract as (
      select date_adjusted, sum(some_number) as daily_sum_of_some_number,
             entity_id
      from `some table`
      group by date_adjusted, entity_id
------------------------------^
     )
select date_adjusted, entity_id,
      sum(log(1 + sum(daily_sum_of_some_number))) over
          (partition by entity_id 
           order by date_adjusted 
          ) as smoothed_number
from daily_extract
group by 1, 2;

【讨论】:

  • 该基金与实体只是一个错字道歉。无论您是正确的,您的代码都有效,所以谢谢。我正在修改一个查询,该查询最初没有在日期之前进入任何组,没有删除似乎是这里主要区别的窗口框架子句。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-12-11
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
相关资源
最近更新 更多