0

我是 PostgreSQL 的新手,所以请耐心等待。

我有两张桌子,一张叫做“polys”,有几个多边形,另一张叫做“box”,只包含一个多边形(我的边界框)。我的查询选择了“多边形”中落在边界框“框”内的所有多边形——如果你愿意,可以选择一个剪辑。两个表都有两列,一列包含它们的 ID,另一列包含名为“the_geom”的 GeoJSON。

我想要的是一列包含落在边界框内的多边形的 ID,另一列包含这些多边形的 GeoJSON,称为“the_geom_webmercator”,另一列称为“polygonarea”,每个多边形的面积,然后是另一列称为“totalarea”,其中包含每个多边形的相同值(该值是所有多边形的总和)。但是,简单地询问 SUM 是行不通的,因为它只返回 1 个值。相反,我希望这个值填满整个列。以下是我尝试过的;`SUM...AS' 是有问题的部分。

SELECT polys.id, ST_Transform(ST_Intersection(polys.the_geom, box.the_geom),3857)
AS the_geom_webmercator,
ST_Area(ST_Transform(ST_Intersection(polys.the_geom,box.the_geom),3857))
AS polygonarea,
SUM(ST_Area(ST_Transform(ST_Intersection(polys.the_geom,box.the_geom),3857)))
AS totalarea FROM polys,box
4

1 回答 1

2

如果您使用 SUM() 聚合函数,您还需要一个 GROUP BY 语句。

我猜你想要的是一个窗口函数

http://www.postgresql.org/docs/9.1/static/tutorial-window.html

使用窗口函数,您可以在没有 GROUP BY 的情况下计算单行的聚合。

SELECT 
 polys.id, 
 ST_Transform(ST_Intersection(polys.the_geom, box.the_geom),3857) AS the_geom_webmercator,
 ST_Area(ST_Transform(ST_Intersection(polys.the_geom,box.the_geom),3857)) AS polygonarea,
 SUM(ST_Area(ST_Transform(ST_Intersection(polys.the_geom,box.the_geom),3857)))  OVER () AS totalarea
FROM polys,box
于 2012-06-06T09:47:24.000 回答