使用SUM过滤结果时,Google BigQuery相关子查询错误

时间:2019-01-07 20:01:47

标签: google-bigquery

我在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。

目标是编写这样的查询:

告诉我所有访问过usersthe pricing page 10 times in the last week的{​​{1}}

the contact page 1 time in the last day

注意:此查询是从仪表板UI生成的,因此它可能具有多个过滤条件。

对于我来说,如何使用JOIN支持具有不同路径/计数的多个子查询不是很明显。

1 个答案:

答案 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的子查询,在外部查询中比较所需的最小值。