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



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

我有两个表,一个称为"多边形",有几个多边形,另一个称为"盒子",仅包含一个多边形(我的边界框)。 我的查询选择"polys"中落在边界框"框"内的所有多边形 - 如果您愿意,可以选择剪辑。 这两个表都有两列,一列包含其 ID,另一列包含名为"the_geom"的 GeoJSON。

我想要的是一列包含落在边界框内的多边形的 ID,另一列包含这些多边形的 GeoJSON,称为"the_geom_webmercator",另一列称为"多边形区域",每个多边形的面积,然后是另一列称为"总面积",其中包含每个多边形的相同精确值(值是所有多边形的总和)。但是,简单地请求 SUM 是行不通的,因为这只返回 1 个值。 相反,我希望此值填充整个列。 以下是我尝试过的;"总和...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

如果使用 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

最新更新