Sql BIGQUERY:替换a';空';使用另一个表的用户id从一个表生成的结果
值得信赖的BQ专家 背景: 我让用户在网站上阅读文章(用户表a),用户通过电子邮件点击文章(用户表B),并为每个用户设置BQ视图表。用户表A缺少通过电子邮件单击的用户的某些用户id。见下面的用户表ASql BIGQUERY:替换a';空';使用另一个表的用户id从一个表生成的结果,sql,google-bigquery,timestamp,bigquery-standard-sql,Sql,Google Bigquery,Timestamp,Bigquery Standard Sql,值得信赖的BQ专家 背景: 我让用户在网站上阅读文章(用户表a),用户通过电子邮件点击文章(用户表B),并为每个用户设置BQ视图表。用户表A缺少通过电子邮件单击的用户的某些用户id。见下面的用户表A *User Table A* - Website id | user_id | article id | viewed_at ------------------------------------------------------------------ 1 | 1
*User Table A* - Website
id | user_id | article id | viewed_at
------------------------------------------------------------------
1 | 1 | 1000 | 2019-01-25 01:04:00 UTC
2 | 2 | 1001 | 2019-01-25 01:03:00 UTC
3 | 3 | 1002 | 2019-01-25 01:03:00 UTC
4 | null | 1001 | 2019-01-25 01:04:00 UTC
5 | null | 1000 | 2019-01-24 20:49:00 UTC
6 | null | 1003 | 2019-01-24 20:47:00 UTC
*User Table B* - Email
id | user_id | article id | clicked_at
------------------------------------------------------------------
1 | 1 | 1000 | 2019-01-25 01:04:00 UTC
2 | 1 | 1000 | 2019-01-24 20:49:00 UTC
3 | 6 | 1003 | 2019-01-24 20:47:00 UTC
- 我想创建一个视图/表,用用户表B中的用户id替换用户表a中的空用户id结果如果查看和单击的位置相同,并且用户表a和用户表B中的文章id也相同
- 如果在用户表B中找不到相应的viewed_at/clicked_at和article_id,我还希望保留user_id null结果
请帮忙。这已经让我头疼了好几个月了。我想你可以使用
左连接:
select w.id,
coalesce(w.user_id, e.user_id) as user_id,
w.article_id, w.viewed_at
from website w left join
email e
on w.article_id = e.article_id and
w.viewed_at = e.viewed_at and
w.user_id is null;
请注意,这种逻辑排序假设您在电子邮件表中没有重复的文章id
/查看位置我认为您可以使用左连接:
select w.id,
coalesce(w.user_id, e.user_id) as user_id,
w.article_id, w.viewed_at
from website w left join
email e
on w.article_id = e.article_id and
w.viewed_at = e.viewed_at and
w.user_id is null;
请注意,这种逻辑排序假定您在电子邮件表中没有重复的文章id
/查看的下面是针对BigQuery标准SQL的
#standardSQL
SELECT
a.id,
IFNULL(a.user_id, b.user_id) user_id,
a.article_id,
viewed_at
FROM `project.dataset.website` a
LEFT JOIN `project.dataset.email` b
ON a.user_id IS NULL
AND a.article_id = b.article_id
AND viewed_at = clicked_at
下面是BigQuery标准SQL
#standardSQL
SELECT
a.id,
IFNULL(a.user_id, b.user_id) user_id,
a.article_id,
viewed_at
FROM `project.dataset.website` a
LEFT JOIN `project.dataset.email` b
ON a.user_id IS NULL
AND a.article_id = b.article_id
AND viewed_at = clicked_at
@米哈伊尔你过去帮了大忙,你对这件事有什么想法吗?谢谢,@gordonlinoff你帮了大忙。不过我有一个问题。我对一篇文章进行了查询,这篇文章(在网站上)的总阅读量为6251。如果我只是用相应的用户id(如果存在)替换“null”值,那么我假设这个总读取计数不应该改变。当我运行这两个查询时(它给出的结果与Mikail的查询相同),我得到的总文章阅读计数结果为21109。你知道为什么会发生这种事吗?@mikhail你过去帮了大忙,你对这件事有什么想法吗?谢谢,@gordonlinoff你帮了大忙。不过我有一个问题。我对一篇文章进行了查询,这篇文章(在网站上)的总阅读量为6251。如果我只是用相应的用户id(如果存在)替换“null”值,那么我假设这个总读取计数不应该改变。当我运行这两个查询时(它给出的结果与Mikail的查询相同),我得到的总文章阅读计数结果为21109。你知道为什么会发生这种事吗?谢谢,@mikhail你帮了我大忙。不过我有一个问题。我对一篇文章进行了查询,这篇文章(在网站上)的总阅读量为6251。如果我只是用相应的用户id(如果存在)替换“null”值,那么我假设这个总读取计数不应该改变。当我运行这两个查询时(它给出的结果与Gordon的查询相同),我得到的总文章阅读计数结果是21109。您知道为什么会发生这种情况吗?我希望如此,因为没有任何逻辑可以阻止表A中具有NULL的同一行与表B中具有相同文章和数据的多行匹配,从而增加结果中的行数。您需要提出解决此问题的业务逻辑,并提出post问题。你现在的问题——答案是Hanks@mikhail。我可以查询不同的用户id,这确实有助于解决我的另一个问题,因此非常感谢您的帮助。谢谢,@mikhail您的帮助。不过我有一个问题。我对一篇文章进行了查询,这篇文章(在网站上)的总阅读量为6251。如果我只是用相应的用户id(如果存在)替换“null”值,那么我假设这个总读取计数不应该改变。当我运行这两个查询时(它给出的结果与Gordon的查询相同),我得到的总文章阅读计数结果是21109。您知道为什么会发生这种情况吗?我希望如此,因为没有任何逻辑可以阻止表A中具有NULL的同一行与表B中具有相同文章和数据的多行匹配,从而增加结果中的行数。您需要提出解决此问题的业务逻辑,并提出post问题。你现在的问题——答案是Hanks@mikhail。我可以查询不同的用户id,这确实有助于解决我的另一个问题,因此非常感谢您的帮助。@Livewire。你接受了6小时后发布的基本相同的答案。嘿@gordonlinoff抱歉,我对答案选择的工作方式不太熟悉。你能简单地解释一下礼仪吗?对不起,我冒犯了你。。。没有一个是有线电视。你接受了6小时后发布的基本相同的答案。嘿@gordonlinoff抱歉,我对答案选择的工作方式不太熟悉。你能简单地解释一下礼仪吗?对不起,我冒犯了你。。。没有人打算这么做。