Обновление работает sql с count (*), st_intersect и запросом TO для подсчета фактических чисел по group_id - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть рабочий sql, который дает мне новые поля, используя select count (*) на unique_id в stable_area (table_with_polygon) с запросом к change_area (table_with_polygons. P.date2 на самом деле из change_area.

SELECT p.group_name, p.date, p.date2, p.group_id, p.polygons_per_group_id,
(select count(*) from change_area b where ST_Intersects(p.shape,b.shape) AND COALESCE(impact,1) = 1 AND b.date > date2 as low_impact,
(select count(*) from change_area b where ST_Intersects(p.shape,b.shape) AND impact = 2 AND b.date2 > date as medium_impact,
(select count(*) from change_area b where ST_Intersects(p.shape,b.shape) AND impact = 3 AND b.date2 > date as high_impact,
(select count(*) from change_area b where ST_Intersects(p.shape,b.shape) AND impact = 4 AND b.date2 > date as xtrahigh_impact,
(select count(*) from change_area b where ST_Intersects(p.shape,b.shape) AND b.date > date2 as total_impact,
FROM stable_area p ORDER BY p.group_name

Мне нужно выяснить фактические числа по group_id, запрос ebove необходимо выполнить для каждого отдельного многоугольника из stable_area, а затем суммировать воздействия по group_id.

Я пробовал ST_JOIN перед выполнением запроса, но это, очевидно, не сработало, так как запрос дат не закончился, потому что все индивидуальные stable_area имеют разные даты. Также все полигоны в stable_area перекрываются.

Итак, допустим, у change_area есть 8 полигонов, где date2 на 4 из них имеет 20200315, и у 4 из них есть 20200409, и есть 2 полигона stable_area с тем же group_id, что у 1-го полигона есть дата 20200310, а у второго - 20200405, в этом сценарии все change_area находятся в обоих полигонах из stable_area с тем же идентификатором group_id, затем выполните

SELECT p.group_name, p.date, p.date2, p.group_id, p.polygons_per_group_id,
(select count(*) from change_area b where ST_Intersects(p.shape,b.shape) and COALESCE(impact,1) = 1 AND b.date2 > p.date) as low_impact,
FROM stable_area p ORDER BY p.group_id

тогда получить сумму change_area отдельного stable_area с тем же group_id. результат, приведенный выше, дает мне 12 в подсчете, но я никогда не должен получить больше 8 полигонов change_area в общем, и, вероятно, меньше, поскольку date может отличаться больше.

Так что в этом случае общее изменение change_area на group_id в стабильном площадь должна быть 8.

Я работаю в Postgres / postgis

Я новичок. Спасибо

...