我想在Postgis中计算'a'多边形的总面积,它与其他'b'相交。
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情况,因此计算区域反映了所有的SUM,甚至是重复的'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
SELECT DISTINCT和SUM / GROUP BY的组合不正确吗?
答案 0 :(得分:0)
这可能与您fk_sites
列有关,因为查询本身应该没问题,尽管在DISTINCT
值上执行double precision
绝对不是一件好事。
您可以通过在子查询中识别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;