为什么可以';我在PostgreSQL PostGIS中向整个列添加一个值吗?

为什么可以';我在PostgreSQL PostGIS中向整个列添加一个值吗?,postgresql,postgis,Postgresql,Postgis,我是PostgreSQL的新手,所以请容忍我 我有两个表格,一个叫做“多边形”,有几个多边形,另一个叫做“长方体”,只包含一个多边形(我的边界框)。我的查询选择“多边形”中位于边界框“长方体”内的所有多边形,如果您愿意,这是一个剪辑。两个表都有两列,一列包含它们的ID,另一列包含它们的GeoJSON,称为“theu geom” 我想要的是一列包含位于边界框内的多边形ID,另一列包含这些多边形的GeoJSON,称为“the_geom_webmercator”,另一列称为“Polygorea”,包含

我是PostgreSQL的新手,所以请容忍我

我有两个表格,一个叫做“多边形”,有几个多边形,另一个叫做“长方体”,只包含一个多边形(我的边界框)。我的查询选择“多边形”中位于边界框“长方体”内的所有多边形,如果您愿意,这是一个剪辑。两个表都有两列,一列包含它们的ID,另一列包含它们的GeoJSON,称为“theu geom”

我想要的是一列包含位于边界框内的多边形ID,另一列包含这些多边形的GeoJSON,称为“the_geom_webmercator”,另一列称为“Polygorea”,包含每个多边形的面积,然后另一列称为“totalarea”,其中包含每个多边形的相同精确值(该值是所有多边形的和)。但是,简单地求和不起作用,因为它只返回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
如果使用SUM()聚合函数,还需要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

使用建议的代码启动并运行。非常感谢。