sql - 如何按顺序在 postgres 中使用我的表的值?
问题描述
我正在尝试更新一个表,以便一列的值对应于另一列中的某个值 = 1。这是我的代码到目前为止:
update myTable
set area = area *
(1/ (select sum(area)
from myTable
where census_tract = 36081116301))
where census_tract = 36081116301;
在这里,我正在更新每个人口普查区。面积列中的多个值归属于同一人口普查区。如何在不单独调用每个人口普查区的情况下为每个人口普查区执行此操作?谢谢!
解决方案
您似乎想要一个相关的子查询:
update myTable
set area = area *
(select 1.0 / sum(t2.area)
from myTable t2
where t2.census_tract = t.census_tract
);
但是,这通常会使用聚合查询来处理:
update myTable t
set area = area / c.total_area
from (select census_tract, sum(area) as total_area
from myTable
group by census_tract
) c
where c.census_tract = t.census_tract;
我还建议您将面积比例存储在另一列中。area
覆盖已经存在的数据似乎很危险。
推荐阅读
- c++ - 将包含数组的结构传递给函数
- c++ - C++ 标准是否保证任何关于在空容器上运行的算法?
- python - 如果我们将 maxsize = 0 放入 Queue 。然后会发生什么,我们可以在这之后插入元素吗?
- scala - 无法从现有 RDD 创建 RDD - Apache Spark
- ubuntu - 重新启动 aws ubuntu ec2 实例后无法在远程桌面中打开终端
- reactjs - 在服务人员或服务器中保存firebase通知?
- javascript - 如何使用 Jquery 中的 next() 函数将类添加到链接?
- python - 运行 Scala 类的 Python 包装器
- python - 如何打印 KMeans 初始参数?
- reactjs - 尽管代码相同/在其余部分工作,但 React 站点中一页的 P 标记未显示