我正在尝试使用BigQuery连接两个大型数据集。它们有一个公共字段,但是公共字段在每个数据集中都有不同的名称。
我想计算行数并将table1和table2的案例逻辑结果相加。
我认为由于子查询(subselect?)和语法错误而导致错误。我试图从类似的帖子申请先例,但我似乎仍然缺少一些东西。非常感谢任何有助于获得此分类的帮助。
SELECT
table1.field1,
table1.field2,
(
SELECT COUNT (*)
FROM table1) AS table1_total,
sum(case when table1.mutually_exclusive_metric1 = "Y" then 1 else 0 end) AS t1_pass_1,
sum(case when table1.mutually_exclusive_metric1 = "Y" AND table1.mutually_exclusive_metric2 IS null OR table1.mutually_exclusive_metric3 = 'Y' then 1 else 0 end) AS t1_pass_2,
sum(case when table1.mutually_exclusive_metric3 ="Y" AND table1.mutually_exclusive_metric2 ="Y" AND table1.mutually_exclusive_metric3 ="Y" then 1 else 0 end) AS t1_pass_3,
(
SELECT COUNT (*)
FROM table2) AS table2_total,
sum(case when table2.metric1 IS true then 1 else 0 end) AS t2_pass_1,
sum(case when table2.metric2 IS true then 1 else 0 end) AS t2_pass_2,
(
SELECT COUNT (*)
FROM dataset1.table1 JOIN EACH dataset2.table2 ON common_field_table1 = common_field_table2) AS overlap
FROM
dataset1.table1,
dataset2.table2
WHERE
XYZ
提前致谢!
答案 0 :(得分:1)
昭。让我们一步一步:
1)使用*不明确,明确是好的。另外,声明显式选择和*将使用自动名称重复选择。 table1.field
将成为table1_field
。除非你只是在玩,否则不要使用*。
2)你从未加入过。带连接的查询如下所示(注意WHERE和GROUP语句的顺序,注意每个语句的命名):
SELECT
t1.field1 AS field1,
t2.field2 AS field2
FROM dataset1.table1 AS t1
JOIN dataset2.table2 AS t2
ON t1.field1 = t2.field1
WHERE t1.field1 = "some value"
GROUP BY field1, field2
其中t1.f1 = t2.f1包含相应的值。你不会在选择中重复这些。
3)使用空格使代码更易于阅读。它可以帮助所有参与者,包括你。
4)你的子选择很没用。使用子选择而不是创建新表。例如,您可以使用子选择来对现有表中的数据进行分组或过滤。例如:
SELECT
subselect.field1 AS ssf1,
subselect.max_f1 AS ss_max_f1
FROM (
SELECT
t1.field1 AS field1,
MAX(t1.field1) AS max_f1,
FROM dataset1.table1 AS t1
GROUP BY field1
) AS subselect
subselect实际上是一个你可以选择的新表。在逻辑上对待它,就像它首先发生一样,然后从中获取结果并在主选择中使用它。
5)这是一个可怕的问题。它甚至看起来不像你试图一步一步解决问题。