2014-11-17 3 views
-1

두 개의 표가 있습니다. 하나는 점 목록이 있고 다른 하나는 다각형 목록이 있습니다. 각 폴리곤에 얼마나 많은 점이 있는지 찾아 냈습니다. 나는 count (*)를 찾았지만, 테이블의 total_num이라는 새로운 행에 그것을 어떻게 삽입 할 수 있을지 모르겠다.표의 열에 카운트 값 삽입

그래서 여기있다. 표 1- 포인트, 표 2 - 폴리.

포인트는 모든 점 기하 데이터와 폴리는 id, 모든 다각형 기하 데이터가있는 기하 열을가집니다.

select count(*) as total 
from points, poly 
where st_contains(poly.geom,points.the_geom) 
group by poly.id; 

내가 (폴리 테이블의 고유 한) ID를 기반으로 그들을 그룹화하고 있습니다 :

내가 사용 toatl_num (각 폴리곤 내부 점의 수)를 발견 할 수 있었다. 나는 이것이 옳다는 것을 희망한다. 이제 어떻게이 총계를 가져 와서 poly 테이블의 total_num 열에 삽입 할 수 있습니까? 포인트 -

update poly 
set total_num=select count(*) as total 
from points, poly 
where st_contains(poly.geom,points.the_geom) 
group by poly.id; 

표 :

the_geom 
--------- 
0101000020D708000000000000E8282F4100000000F0BB0D41 
0101000020D7080000000000006C892E410000000040170341 
0101000020D7080000000000003EB82F4100000000A8660641 
0101000020D708000000000000FA792E4100000000D01A0641 
0101000020D708000000000000821F2F410000000028500841 
0101000020D70800000000000004A32F4100000000B8B90241 



Table - poly 
------------ 

id | geom | total_num 

1 |(geom consist of geometrical representation of polygon 
2 | which can not be entered here because its too long) 
3 | 
4 | 
5 | 
6 | 

그러나 이것은 나에게 오류를 제공

나는이 시도! 감사합니다.

+0

예, 다음 테이블 폴리에 totalnum라는 이름의 열을 생성하고 poly.id –

+0

에 따라 각 폴리의 수를 업데이트 할 UPDATE 문을 사용하지만, 일을 doest'nt. 내가 말한 오류가 나타납니다 - 표현식으로 사용되는 하위 쿼리에 의해 반환 된 두 개 이상의 행 –

+0

조인 조건을 적용해야합니다 조인에서 p1.id는 p2.id와 같아야합니다. 여기서 p1과 p2는 폴리 테이블의 별칭입니다. Google을 사용하여 Update 문을 조인으로 확인하십시오. –

답변

0

Subquery 대신 INNER Join을 사용하십시오.

UPDATE poly 
SET total_num=B.total 
FROM (  SELECT Count(*) AS total ,poly.ID 
       FROM  points, 
         poly 
       WHERE St_contains(poly.geom,points.the_geom) 
       GROUP BY poly.id) B 
where poly.id = B.id 
+0

열 b.id가 존재하지 않는다는 오류가 발생합니다. –

+0

@johnmathew 지금 쿼리 확인에 ID를 추가했습니다. –

+0

테이블 "a"가 두 번 이상 지정되었습니다. –