我是PostgreSQL的新手,所以请耐心等待。
我有两个表,一个名为“polys”,有几个多边形,另一个名为“box”,只包含一个多边形(我的边界框)。我的查询选择“多边形”中所有位于边界框“框”内的多边形 - 如果愿意,则选择一个剪辑。两个表都有两列,一列包含ID,另一列包含名为“the_geom”的GeoJSON。
我想要的是一列包含落在边界框内的多边形ID,另一列包含这些多边形的GeoJSONs,称为“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
答案 0 :(得分:2)
如果使用SUM()聚合函数,还需要GROUP BY语句。
我想你想要的是一个WINDOW函数
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