Почему я не могу добавить одно значение ко всему столбцу в PostgreSQL PostGIS?

Я новичок в PostgreSQL, так что терпите меня.

У меня есть две таблицы, одна называется «многоугольники» с несколькими полигонами, а другая называется «бокс», которая содержит только один многоугольник (мой ограничивающий прямоугольник). Мой запрос выбирает все многоугольники в "многоугольниках", которые попадают в ограничивающий прямоугольник "прямоугольник" - клип, если хотите. Обе таблицы имеют два столбца, один из которых содержит их идентификаторы, а другой - их GeoJSON под названием «the_geom».

Мне нужен один столбец, содержащий идентификаторы многоугольников, попадающих в ограничивающую рамку, другой столбец с GeoJSON этих многоугольников, называемый «the_geom_webmercator», еще один, называемый «polygonarea», с площадью каждого многоугольника, а затем еще один столбец с именем «totalarea», который содержит ОДИНАКОВОЕ ТОЧНОЕ ЗНАЧЕНИЕ для каждого многоугольника (значение представляет собой сумму всех многоугольников). Однако простой запрос SUM не сработает, поскольку он возвращает только 1 значение. Вместо этого я хочу, чтобы это значение заполнило весь столбец. Ниже то, что я пробовал; "СУММ ... КАК" - это рассматриваемая часть.

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

person John    schedule 06.06.2012    source источник


Ответы (1)


Если вы используете агрегатную функцию 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
person Thomas    schedule 06.06.2012
comment
Запущен и работает с предложенным кодом. Большое тебе спасибо. - person John; 06.06.2012