Этот SQL дает мне список идентификаторов и количество точек в полигоне.
select count(*), poly.gid
from inpn p
INNER JOIN half_degree poly ON
poly.the_geom && p.the_geom and CONTAINS(poly.the_geom, p.the_geom)
group by poly.gid
count gid
10 1
30 2
..
Теперь я хочу обновить столбец таблицы (half_degree) с информацией о количестве.
update half_degree
set inpn_count = (
select count(*)
from inpn p
INNER JOIN half_degree poly ON
poly.the_geom && p.the_geom
and CONTAINS(poly.the_geom, p.the_geom)
)
но это обновляет inpn_count с ОБЩЕЙ СЧЕТОМ точек во всех многоугольниках. Затем, если я добавлю группу по количеству ...
update half_degree
set inpn_count=(
select count(*) as i
from inpn p
INNER JOIN half_degree poly ON
poly.the_geom && p.the_geom
and CONTAINS(poly.the_geom,p.the_geom)
group by i
)
ERROR: Agreggate not authorised inside a GROUP BY
Что я могу сделать, если у меня нет связи между обеими таблицами? (чтобы добавить предложение WHERE в обновление sql). Можно ли избежать использования PLPGSQL?