【发布时间】: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 支持具有不同路径/计数的多个子查询并不明显。
【问题讨论】:
标签: google-bigquery