首页 > 解决方案 > 如何按顺序在 postgres 中使用我的表的值?

问题描述

我正在尝试更新一个表,以便一列的值对应于另一列中的某个值 = 1。这是我的代码到目前为止:

update myTable
set area = area * 
    (1/ (select sum(area)
         from myTable
         where census_tract = 36081116301))
where census_tract = 36081116301;

在这里,我正在更新每个人口普查区。面积列中的多个值归属于同一人口普查区。如何在不单独调用每个人口普查区的情况下为每个人口普查区执行此操作?谢谢!

标签: sqlpostgresql

解决方案


您似乎想要一个相关的子查询:

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覆盖已经存在的数据似乎很危险。


推荐阅读