我在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。
目标是编写这样的查询:
告诉我所有访问过users
和the pricing page 10 times in the last week
的{{1}}
the contact page 1 time in the last day
注意:此查询是从仪表板UI生成的,因此它可能具有多个过滤条件。
对于我来说,如何使用JOIN支持具有不同路径/计数的多个子查询不是很明显。
答案 0 :(得分: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
的子查询,在外部查询中比较所需的最小值。