Google bigquery 用子查询连接两个数据集

Google bigquery 用子查询连接两个数据集,google-bigquery,Google Bigquery,我正在尝试使用BigQuery连接两个大型数据集。它们有一个公共字段,但是公共字段在每个数据集中有不同的名称 我想计算行数,并对表1和表2的案例逻辑结果求和 我相信我有子查询(subselect?)和语法错误导致的错误。我曾尝试应用类似帖子中的先例,但我似乎仍然遗漏了一些东西。非常感谢您在整理此文件时提供的任何帮助 SELECT table1.field1, table1.field2, ( SELECT COUNT (*) FROM table1) AS table1_

我正在尝试使用BigQuery连接两个大型数据集。它们有一个公共字段,但是公共字段在每个数据集中有不同的名称

我想计算行数,并对表1和表2的案例逻辑结果求和

我相信我有子查询(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

提前谢谢

Sho。让我们一步一步来:
1) 使用*并不显式,显式是好的。此外,声明explicit selects和*将使用AUTORENAME复制selects<代码>表1。字段将变为
表1\u字段
。除非你只是在玩,否则不要使用*

2) 你从来没有加入过。带有联接的查询如下所示(注意WHERE和GROUP语句的顺序,注意每个语句的命名):

其中t1.f1=t2.f1包含相应的值。你不会在选择中重复这些

3) 使用空格使代码更易于阅读。它帮助所有参与的人,包括你

4) 你的子选择是非常无用的。使用子选择,而不是创建新表。例如,可以使用subselect对现有表中的数据进行分组或筛选。例如:

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) 这是一个可怕的问题。看起来你甚至都不想一步一步地解决问题。

“错误”?哪些错误?通常这些错误是非常明显的。现在,您给出了一个没有括号平衡的查询(您打开了三个不同的括号,它们永远不会闭合)。试着提供一个示例数据集,结果是什么,或者至少是运行此程序时出现的错误?@Patrice,这会有很多错误,我很惊讶他没有显示这些错误
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