我有一个查询,它给出了同一日期四个不同表中的记录总数。我为五个相关项目筛选它们并排除一种类型。
SELECT
COUNT (*) AS table_total_filtered
FROM
db.table_1_20150727,
db.table_2_20150727,
db.table_3_20150727,
db.table_4_20150727
WHERE
item LIKE "A" OR item LIKE "B" OR item LIKE "C"
OR item LIKE "D" OR item LIKE "E" AND
type NOT LIKE "Z"
我有第二个查询,它给了我第二个表中的行数。数据可能存在时区差异,因此我将目标日拉为中间日期三天。
SELECT
COUNT (*) AS table_2_total
FROM
db2.table_20150726,
db2.table__20150727,
db2.table__20150728
这两个表有一个共同的字段。公共字段在每个表中具有不同的名称。该字段在table_1,table_2,table_3和table_4中称为ID1。它在表中称为ID2。我想获取第二个查询的结果,然后计算ID在两者之间匹配的次数。
SELECT
COUNT (*) AS overlap
FROM
db.table_1_20150727,
db.table_2_20150727,
db.table_3_20150727,
db.table_4_20150727,
db2.table_20150726,
db2.table__20150727,
db2.table__20150728
WHERE
item LIKE "A" OR item LIKE "B" OR item LIKE "C"
OR item LIKE "D" OR item LIKE "E" AND
type NOT LIKE "Z" AND
ID1 = ID2
据我了解,此查询无法正常工作,因为第一步需要计算第一个表并尝试计算不存在的ID2。使用表名限定字段似乎也不起作用,因为文本不会变为蓝色。我认为在这一点上排位不是我的问题,我需要做的是将第一个查询的结果与第二个查询的结果左联接,然后计算ID1 = ID2的位置?
非常感谢有关如何编写/接近相应语句以加入这两个查询以及计算ID1与ID2匹配的记录数量的任何帮助!
谢谢!
答案 0 :(得分:0)
听起来你想要一个非常简单的JOIN
,每个初始查询都是来源:
SELECT
COUNT(*) as overlap
FROM (
SELECT
ID1
FROM
db.table_1_20150727,
db.table_2_20150727,
db.table_3_20150727,
db.table_4_20150727
WHERE
item LIKE "A" OR item LIKE "B" OR item LIKE "C"
OR item LIKE "D" OR item LIKE "E" AND
type NOT LIKE "Z") AS table_1
JOIN (
SELECT
ID2
FROM
db2.table_20150726,
db2.table__20150727,
db2.table__20150728) as table_2
ON table_1.ID1 = table_2.ID2
请注意,在很多SQL系统中,逗号表示JOIN
,但in BigQuery, the comma actually represents a union:
注意:与许多其他基于SQL的系统不同,BigQuery使用逗号语法来指示表联合,而不是联接。
这可能就是为什么您上面发布的查询没有做您期望的事情。