google-bigquery - Bigquery - 'Having' 无法按预期工作

标签 google-bigquery having

我有一个疑问:

SELECT date(date) as day, App, count(*) as cnt,
avg(cnt) over (partition by App) as avg_per_day

FROM [DATABASE]

group by date,two_hour, App

现在我基本上只想只使用平均每天下载量超过 5 次的应用程序。但是,当我添加having avg_per_day>5时,我得到

Field 'avg_per_day' not found.

另外输入 where avg(cnt) over (partition by App) > 5 不起作用。

我做错了什么?

我不想使用双SELECT,因为每个查询都要花钱,而且它们应该每小时运行一次。

谢谢

最佳答案

OVER() 函数在 HAVING 步骤之后运行 - 因此在 HAVING 阶段,avg_per_day 列仍然不存在。

而不是:

SELECT date(date) as day, App, count(*) as cnt,
avg(cnt) over (partition by App) as avg_per_day
FROM [DATABASE]
group by date,two_hour, App
having avg_per_day>5

尝试:

SELECT day, App, cnt, avg_per_day
FROM (
SELECT date(date) as day, App, count(*) as cnt,
avg(cnt) over (partition by App) as avg_per_day
FROM [DATABASE]
group by date,two_hour, App
)
WHERE avg_per_day>5

成本方面应该是相同的。

关于google-bigquery - Bigquery - 'Having' 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34898206/

相关文章:

sql - 时间戳到日期 SQL

python - 使用 ValueProvider 在 Dataflow 中格式化 BigQuery

SQL Query 获取常用记录

mysql - HAVING MIN() 组合返回与 HAVING MAX() 相同的结果

mysql - 创建一个查询以获得两个相同的结果

google-bigquery - 用户的最后一个事件

sql - 通过BigQuery从Google分析中获取访问者的纬度和经度

python - Airflow DAG - 如何先检查 BQ(必要时删除)然后运行数据流作业?

mysql - 你可以在mysql的WHERE子句中使用别名吗?

sql - 可以对未在 GROUP BY 中列出的列使用 HAVING 子句吗?