postgresql 中现有缓冲区中的人口数

Number of population in an existing buffer in postgresql

我有一个空间 table 名为 Operation 的点,所有点的缓冲区都为 100m,我还有另一个 table 带有多边形形状文件,其中包含 population

ew is the population in each polygon

dbfiddle

是否可以通过计算每个缓冲区内的人口将人口作为一列添加到操作 table 中?由于我是 PostgreSQL 的新手,我不知道如何进行。

ALTER TABLE public."Operation" ADD COLUMN population int;

UPDATE public."Operation" o 
SET population = (SELECT pop_per_sq count(*) FROM public."Restaurants" s
           WHERE ST_Contains(o.buffer,s.geom));

结果应该类似于操作 table 中包含人口计数的新列。

你们真的很亲密。聚合函数 count() 的正确语法是 count(column) 而不是 column count(*)。但是您需要的是 sum(),它遵循相同的语法。如果缓冲区和多边形之间没有重叠,则结果将为 null。此外,如果您不希望 table 中有 null 值,请使用 coalesce 将它们的值替换为 0。这应该可以解决您的查询:

UPDATE public."Operation" o 
SET population = coalesce((SELECT sum(ew) FROM public."Population" s
                           WHERE ST_Contains(o.buffer,s.geom)),0);

演示:db<>fiddle

注意:如果你还想计算与缓冲区部分重叠的多边形,请看一下ST_Intersects。请记住,如果两个(或更多)缓冲区重叠并且它们相应的人口几何图形都在两个缓冲区内,它们将被计算两次。

btw +1 很好fiddle,像这样的问题更容易理解!