sql - 用基于 2 个键(列值)的值替换 Null,Postgresql
问题描述
我放弃了寻找自己的答案来执行以下操作(叹气):
城市名 | 纬度 | 液化天然气 |
---|---|---|
一个 | 1 | 10 |
无效的 | 2 | 20 |
无效的 | 3 | 30 |
b | 2 | 20 |
C | 3 | 30 |
我正在处理一个包含大量空值的大型数据集,例如上面的“city_name”。根据“lat”、“lng”中的值,我知道第一个空值是“b”,第二个空值是“c”。
该表有超过 1000 个不同的城市名称和 15000 个空值,可以通过查找具有相同 lat 和 lng 值的行来更正这些空值。根据纬度(lat 列)和经度(lng 列)手动用城市名称替换空值似乎是不可能的。
我希望空值是基于同一行中的 lat 和 lng 的城市名称。也许有一种方法可以引用具有相同 lat 和 lng 的其他行,从中获取城市名称,然后将 null 替换为城市名称?
有没有办法像上面那样在 POSTGRESQL 中一次用城市名称替换所有空值?
提前致谢!
解决方案
在查询中,您可以使用:
select t.*,
max(city_name) over (partition by lat, lng) as imputed_cityname
from t;
如果要更新null
值,可以使用:
update t
set city_name = ll.city_name
from (select lat, lng, max(city_name) as city_name
from t
group by lat, lng
) ll
where ll.lat = t.lat and ll.lng = t.lng and
t.city_name is null;
这是一个 db<>fiddle。
推荐阅读
- python - 值错误:数组太大
- c++ - 使用 CMake 配置 ceres-solver 并找不到 SuiteSparse 配置标头
- python - 排名热编码python3
- r - 数据变化时使用plotlyProxy添加多条trace
- c++ - 如何使优先级队列使用自定义类中的变量(升序/降序)
- javascript - Async/Await 在我的示例中不起作用
- java - 如果用户在应用程序运行期间禁用互联网连接,如何强制应用程序结束?
- javascript - 这个链接的 ES6 箭头函数是什么?
- angular - 如何使用角度本地化根据语言更改 ts 文件
- javascript - 什么是中间值?