2017-02-23 95 views
0

我想使用WITH运算符从我生成的视图中获取计数(foo.bar.cohort),然后可以使用它从我的主视图中的数据计算值(foo.bar.retention_30d) 。看起来这应该是非常简单的,但我得到这个错误,当我尝试执行下面的查询:BigQuery WITH子句抛出“无法识别的名称”错误

无法识别的名称:在[12:29]

这里TOTAL_USERS的查询:

#standardsql 
WITH 
    total_users AS (
    SELECT 
    COUNT(DISTINCT uid) as sum_users 
    FROM 
    `foo.bar.cohort` 
    WHERE 
    first_seen_date > '2016-12-31' 
    AND first_seen_date < '2017-02-01') 
SELECT 
    ROUND(SUM(retained_users)/total_users.sum_users, 2) AS avg, 
    SUM(retained_users) AS retained, 
    SUM(active_users) AS active, 
    total_users.sum_users 
FROM 
    `foo.bar.retention_30d` 
WHERE 
    period = 27 
    AND (created_at > '2016-12-31' 
    AND created_at < '2017-02-01') 

架构为foo.bar.cohort

enter image description here

架构为foo.bar.retention_30d

enter image description here

指针/提示是非常受欢迎的。谢谢!

回答

1

total_users是一个表,而不是一列。如果你想引用其中的列,你需要使用该名称。例如:

#standardsql 
WITH 
    total_users AS (
    SELECT 
    COUNT(DISTINCT uid) as sum_users 
    FROM 
    `foo.bar.cohort` 
    WHERE 
    first_seen_date > '2016-12-31' 
    AND first_seen_date < '2017-02-01') 
SELECT 
    ROUND(SUM(retained_users)/(SELECT sum_users FROM total_users), 2) AS avg, 
    SUM(retained_users) AS retained, 
    SUM(active_users) AS active, 
    (SELECT sum_users FROM total_users) AS sum_users 
FROM 
    `foo.bar.retention_30d` 
WHERE 
    period = 27 
    AND (created_at > '2016-12-31' 
    AND created_at < '2017-02-01') 
+0

啊哈!我试图从total_users内引用sum_users,但没有意识到我仍然不得不像桌子一样对它进行操作。感谢您解决这个问题! –

相关问题