【发布时间】:2018-12-26 09:47:43
【问题描述】:
我想在 BigQuery 中加入多个表,但 Joining multiple tables in bigquery 的解决方案并没有帮助我获得所需的输出。
我的出发点如下。我正在创建 5 个单独的表格,这些表格显示特定页面可能的每个评级值。在此处查看示例输出:
表的创建方式如下:
#standardSQL
CREATE TEMPORARY FUNCTION tables_in_range(suffix STRING) AS (suffix BETWEEN (
SELECT
FORMAT_DATE('%y%m%d',
DATE('2018-06-01')))
AND (
SELECT
FORMAT_DATE('%y%m%d',
DATE('2018-06-30'))));
SELECT
h.page.pagePath AS page,
Count(h.eventInfo.eventLabel)as five_star
FROM
`table.ga_sessions_20*` AS t,
t.hits AS h
WHERE
h.eventInfo.eventAction='rating'
AND h.eventInfo.eventLabel ='5'
AND tables_in_range(_TABLE_SUFFIX)
AND REGEXP_CONTAINS(h.page.pagePath,
r'/xyz/')
AND h.type='EVENT'
group by 1
当按照此处Joining multiple tables in bigquery 的描述加入表格时,我很遗憾没有得到预期的结果。 相反,联接只查看所有 5 个表共有的页面 - 这意味着这些页面在 1-5 的五个可能值中的每一个中都有一个评级。请参阅下面的示例输出。 joint table results
select
five_star.page as page,
five_star.five_star as five_star,
four_star.four_star as four_star,
three_star.three_star as three_star,
two_star.two_star as two_star,
one_star.one_star as one_star
from five_star
join four_star using (page)
join three_star using (page)
join two_star using (page)
JOIN one_star using (page)
我想通过我的联接实现的是这样的表: desired output。 我看到的问题是,如果一个页面没有收到某个评级,它将不会加入查询 atm。不幸的是,我无法通过 Union all、Cross Join 或 left join 找到解决方案,因此非常感谢这里的任何支持!
【问题讨论】:
-
尝试左外连接。列出所有页面的表将位于连接表达式的左侧。然后使用 IsNull 将空值转换为零。大量的教程和示例在线。一个例子在这里:stackoverflow.com/questions/1664266/…
-
感谢您将这篇文章转发给我!
标签: sql google-bigquery bigquery-standard-sql