为什么我不能在PostgreSQL PostGIS中为整列添加单个值?

时间:2012-06-06 03:41:08

标签: postgresql postgis

我是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

1 个答案:

答案 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