简单的修复方法是添加category
第一个内部字段SELECT
- 否则最外层看不到SELECT
- 因此错误!这就是问题所在!
此外,在 BigQuery Legacy SQL 中,您可以使用EXACT_COUNT_DISTINCT https://cloud.google.com/bigquery/query-reference#exact_count_distinct否则你会得到统计近似值 - 请参阅计数([不同]) https://cloud.google.com/bigquery/query-reference#countdistinct
因此,对于旧版 SQL,您的查询可能如下所示:
SELECT
EXACT_COUNT_DISTINCT(joined.t1.Id) AS t1_events,
EXACT_COUNT_DISTINCT(t2.Id) AS t2_events,
joined.t1.Origin AS platform,
joined.t3.category AS category
FROM (
SELECT
Id, Origin, CatId, category
FROM [testing.table_1] AS t1
JOIN (SELECT category, CategoryID FROM [testing.table_3]) AS t3
ON t1.CatId = t3.CategoryID
) AS joined
JOIN (SELECT Id, CategoryId FROM [testing.table_2]) AS t2
ON joined.t1.CatId = t2.CategoryId
GROUP BY platform, category
此外,我觉得你可以进一步简化它(假设不会有歧义字段)
SELECT
EXACT_COUNT_DISTINCT(joined.t1.Id) AS t1_events,
EXACT_COUNT_DISTINCT(t2.Id) AS t2_events,
joined.t1.Origin AS platform,
joined.t3.category AS category
FROM (
SELECT
Id, Origin, CatId, category
FROM [testing.table_1] AS t1
JOIN [testing.table_3] AS t3
ON t1.CatId = t3.CategoryID
) AS joined
JOIN [testing.table_2] AS t2
ON joined.t1.CatId = t2.CategoryId
GROUP BY platform, category
当然,如果您将使用它的标准 SQL 版本,您将需要执行相同的修复(正如 Elliott 建议的那样:
SELECT
COUNT(DISTINCT joined.t1.Id) AS t1_events,
COUNT(DISTINCT t2.Id) AS t2_events,
joined.t1.Origin AS platform,
joined.t3.category AS category
FROM (
SELECT
Id, Origin, CatId, category
FROM `testing.table_1` AS t1
JOIN `testing.table_3` AS t3
ON t1.CatId = t3.CategoryID
) AS joined
JOIN `testing.table_2` AS t2
ON joined.t1.CatId = t2.CategoryId
GROUP BY platform, category