我想在Postgis中计算与其他"b"相交的"a"多边形的总面积。
SELECT DISTINCT a.fk_sites,
SUM(ST_Area(a.the_geom)/100) as area
FROM parcelles a, sites b
WHERE st_intersects(a.the_geom,b.the_geom)
GROUP BY a.fk_sites
我需要做一个 SELECT DISTINCT 因为"a"多边形可能与几个"b"多边形相交,因此返回的"a"多边形会出现几次。
这工作正常,我只是有一个问题,并非所有区域都计算正确。几个接缝忽略 DISTINCT 情况,以便计算面积反映所有记录的总和,甚至是重复的"a"记录(即使它们应该被消除)。当我在没有 SUM 函数的情况下进行查询时,我得到了正确数量的"a"多边形,在添加它们的面积时,我得到了正确的值。
SELECT DISTINCT a.fk_sites,
ST_Area(a.the_geom)/100 as area
FROM parcelles a, sites b
WHERE st_intersects(a.the_geom,b.the_geom)
ORDER BY a.fk_sites
选择非重复和总和/分组依据的组合不正确吗?
这可能与您fk_sites
列有关,因为查询本身应该没问题,尽管对double precision
值执行DISTINCT
从来都不是一件好事。
您可以通过在子查询中标识与a
不同的行,然后在主查询中sum()
来解决此问题:
SELECT fk_sites, sum(ST_Area(the_geom)/100) AS area
FROM (
SELECT a.fk_sites, a.the_geom
FROM parcelles a
JOIN sites b ON ST_Intersects(a.the_geom, b.the_geom)
) sub
GROUP BY fk_sites
ORDER BY fk_sites;