sql - 使用基于另一个列 ID 的值填充部分空列
问题描述
我不确定我的标题是否清楚。对于那个很抱歉。我有下表:
ID ref. dummy_metrics dummy_dimensions
6091039909 A 123 foo
5914111836 B 456 bar
6538463041 C 789 foobar
6018474808 D 1010 bar
6091039909 foo
6091039909 foo
6538463041 foobar
6538463041 foobar
6538463041 foobar
如您所见,我的桌子的某些部分是空的。我想确保该ref.
列总是充满了一些东西。我希望这个值基于ID<>ref.
密钥对组合。
所以这是我的预期输出:
ID ref. dummy_metrics dummy_dimensions
6091039909 A 123 foo
5914111836 B 456 bar
6538463041 C 789 foobar
6018474808 D 1010 bar
6091039909 A foo
6091039909 A foo
6538463041 C foobar
6538463041 C foobar
6538463041 C foobar
我不想像使用CASE
公式那样构建预定义的查找表。我想要ID<>ref.
在我的表中找到的每个密钥对组合都具有动态性。
解决方案
这是一个非常简单的方法:
select t.*,
coalesce(t.ref,
max(t.ref) over (partition by dummy_dimensions),
max(t.ref) over ()
) as imputed_ref
这使用窗口函数来填充缺失值。请注意,有两个级别的插补——一个基于dummy_dimensions
整个表,另一个基于整个表(如果维度ref
值都是NULL
)。
推荐阅读
- php - 小部件中的 yii2 ajax 验证错误,yii\web\Response
- mongodb - 使用错误索引的 MongoDB 查询
- c# - 为所有 WEB API 控制器指定 API 版本
- sql-server - 将跟踪文件加载到 SQL Server - 访问被拒绝
- java - 带袜子端口的 Jsoup
- scala - 期望 NotInferedR 的类型不匹配
- java - JavaFX:FXML TableView 中的空白行
- django - 使用 ElastiCache Redis 配置 django-redis 时出现问题(已启用集群模式)
- google-apps-script - 在 Google 表格之间自动复制数据
- python - 无法连接两个 keras ValueError 模型:使用不是符号张量的输入调用层 concatenate_16