如果这是一个基本问题,我深表歉意,但我刚刚开始使用 SQL 和 BigQuery。
我有一个表,其中有 2 个用于不同事件的特定唯一标识符,如下所示:
+--------+----------+--------+
| Type | Instance | Userid |
+--------+----------+--------+
| event1 | abc123 | user1 |
| event1 | abc123 | user1 |
| event2 | abc123 | null |
| event2 | def456 | null |
| event1 | def456 | user2 |
+--------+----------+--------+
记录的信息取决于事件类型,事件1记录两种类型的标识,事件2仅记录一种类型(以节省空间)。如何使用为两种事件类型记录的实例标识符作为查找,以将 userid 中的空值替换为相应的用户值:即我们知道实例“abc123”是 user1 的产品,因此任何事件(例如 event2)实例为“abc123”且 userid 为空值时,应将空值替换为“user1”。结果是这样的:
+--------+----------+--------+
| Type | Instance | Userid |
+--------+----------+--------+
| event1 | abc123 | user1 |
| event1 | abc123 | user1 |
| event2 | abc123 | user1 |
| event2 | def456 | user2 |
| event1 | def456 | user2 |
+--------+----------+--------+
我研究过诸如 COALESCE
和 IFNULL
之类的函数,但我不确定我的 BigQuery 版本以及所有不同风格是否支持它们JOIN
似乎假设不同的表(我只在隔离环境中使用该表)。
最佳答案
您可以使用窗口函数获取一个值:
select type, instance,
coalesce(userid, max(userid) over (partition by instance))
from t;
关于sql - 如何根据同一个表中的其他列匹配替换空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56039432/