我正在尝试在BigQuery中加入三个表;表1具有一个事件的记录(即每一行是一个记录),表2具有第二个事件的记录,表3具有类别名称。
我想生成一个最终表,该表具有按类别和设备平台划分的表1和表2的计数。但是,每次运行此命令时,我都会收到一条错误消息,指出
join.t3.category不是join中任何一个表的字段 。
这是我当前的代码:
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
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;
作为参考,这是表1和2之间的一个更简单的联接,可以很好地工作:
Select count(distinct t1.Id) as t1_event, count(distinct t2.Id) as t2_events, t1.Origin as platform
from testing.table_1 as t1
JOIN testing.table_2 as t2
on t1.CatId = t2.CategoryId
Group by platform;
简单的解决方法是category
在第一个内部添加字段SELECT
-否则最外面不可见SELECT
-因此出错!那就是问题!
另外,在BigQuery旧版SQL中,您可以使用EXACT_COUNT_DISTINCT,否则您将获得统计近似值-在COUNT([DISTINCT])中查看更多
因此,对于旧版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
问题内容: 我正在尝试运行以下查询,但继续遇到相同的错误 查询失败错误:在第6行第33列遇到“”。 查询是: 从[Dataset1.1_0_MEMBER_GROUP]中 选择1_0_MEMBER_GROUP.User_Group, 1_0_MEMBER_GROUP.Member_ID, 1_4_MEMBER_TRAN_YEAR.MEMBER_UID 在1_0_MEMBER_GROUP_YEAR_M
问题内容: 我有三个表:R,S和P。 表R通过外键与S连接;有 应该 是S中至少一个的记录,所以我可以加入: 如果S中没有记录,那么我没有行,那很好。 然后表S与P联接,其中记录为P可能存在,也可能不存在,并与S联接。 所以我做 如果我想将第二个JOIN绑定到S而不是R,例如我可以使用括号,该怎么办: 还是这已经是R,S和P之间笛卡尔积的自然行为? 问题答案: 各种外部联接和普通联接都在相同的优先
问题内容: 我正在使用此查询: 产生以下结果: 我改变了场CAT_ID到一个名为新表包含的字段,,。我如何通过也加入该表来编写新查询,以获得与上述相同的结果? 我是数据库新手,需要帮助。提前致谢 问题答案: 试试这个: 这个想法很简单,在新表中的第一个字段是工作作为 代理键 ,它没有任何与其他两个表之间的关系。然后,我们来到了另外两个领域是哪些,这些你应该映射到关系的其他两个方面。 您不能使用新模
问题内容: 我有三个表:“产品”,“购买”,“发票” 产品表 : Producct_no听名字 1引用 2听B 3引用C 采购表 : purchase_no听产品_no数量 001引用1听81 002引用150 003引用3引用10 发票表 : Invoice_no听产品_no数量 001引用1引用20 002引用10 003引用3引用10 我想获取每种产品的购买数量和发票数量,我使用以下查询 p
问题内容: 谁能告诉我如何编写查询并如上所述获取结果,谢谢!我试过加入,左右加入。一切都没有结果。 问题答案: 您可以在这两个表之间写左外部联接最好的理解方法是检查下图 查询您的要求 阅读有关 代码项目的 原始文章将对您有很大帮助:SQL Joins的可视表示 。 在以下位置找到原始版本:MySQL中的JOIN和OUTER JOIN之间的区别 。
如果我有三个表: > 列出所有未被查看的正确方法是什么?此查询是否正确? 按< code>user_id列出所有< code >帖子及其“查看状态”如何? 您是否也可以推荐一个很棒的(用户友好的、非极客的)资源来提高我对LEFT JOIN、CROSS JOIN和(正常连接?从帖子、视图中选择*)的理解? 谢谢大家!