使用 SUM 过滤结果时,Google BigQuery 相关子查询错误
Posted
技术标签:
【中文标题】使用 SUM 过滤结果时,Google BigQuery 相关子查询错误【英文标题】:Google BigQuery correlated subqueries error when filtering results with SUM 【发布时间】:2019-01-07 20:01:46 【问题描述】:我在 Bigquery 中设置了两个表,用于跟踪 users
和每日 page_views
:
users
| id | email |
page_views
| user_id | visit_date | visit_path | counter |
子查询效果很好(不聚合时):
SELECT id
FROM myDataset.users
WHERE account_id = 'ACCOUNT_ID'
-- this works great
AND EXISTS(
SELECT 1
FROM myDataset.pageviews
WHERE user_id = users.id
AND visit_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK)
AND visit_path = '/contact'
AND counter >= 2
LIMIT 1
)
但是,在创建将 SUM
一段时间内的页面浏览次数的查询时,我看到了错误:
不支持引用其他表的相关子查询,除非它们可以去相关,例如通过将它们转换为有效的 JOIN。
目标是编写这样的查询:
告诉我所有访问过the pricing page 10 times in the last week
和the contact page 1 time in the last day
的users
SELECT id
FROM myDataset.users
WHERE account_id = 'ACCOUNT_ID'
-- Correlated subqueries error
AND EXISTS(
SELECT SUM(counter) visit_count_total
FROM myDataset.pageviews
WHERE user_id = users.id
AND visit_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK)
AND visit_path = '/pricing'
HAVING visit_count_total >= 10
LIMIT 1
)
-- Correlated subqueries error
AND EXISTS(
SELECT SUM(counter) visit_count_total
FROM myDataset.pageviews
WHERE user_id = users.id
AND visit_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
AND visit_path = '/contact'
HAVING visit_count_total >= 1
LIMIT 1
)
LIMIT 100
注意:此查询是从仪表板 UI 生成的,因此它可能有多个过滤条件。
对我来说,如何通过 JOIN 支持具有不同路径/计数的多个子查询并不明显。
【问题讨论】:
【参考方案1】:由于您想过滤子查询的SUM
大于某个数字,您可以试试这个:
#standardSQL
WITH mytable
AS (
SELECT *, title account_id, title id, title user_id, views counter
FROM `fh-bigquery.wikipedia_v3.pageviews_2019`
WHERE datehour='2019-01-01 01:00:00'
AND wiki='br'
)
SELECT account_id
FROM `mytable` a
WHERE account_id='Avignon'
AND (
SELECT SUM(counter)
FROM `mytable` b
WHERE a.user_id = b.id
) > 10
基本上是一个返回SUM
的子查询,并在外部查询中比较所需的最小值。
【讨论】:
这很好,感谢您提供的示例。拥有公共数据集非常好:)以上是关于使用 SUM 过滤结果时,Google BigQuery 相关子查询错误的主要内容,如果未能解决你的问题,请参考以下文章
Google 放置 getPlaceID 返回非空数组,但过滤器返回零结果
应用电子商务操作过滤器时,Big Query 和 Google Analytics UI 不匹配
sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu