ST_Collect
ST_Collect에는 두 가지 변형이 있습니다. 하나는 2개의 지오메트리를 허용하고 다른 하나는 집계 표현식을 허용합니다.
ST_Collect의 첫 번째 변형은 입력 지오메트리에서 지오메트리를 생성합니다. 입력 지오메트리의 순서는 유지됩니다. 이 변형은 다음과 같이 작동합니다.
두 입력 지오메트리가 모두 점이면 2개의 점이 있는
MULTIPOINT
가 반환됩니다.두 입력 지오메트리가 모두 라인스트링이면 2개의 라인스트링이 있는
MULTILINESTRING
이 반환됩니다.두 입력 지오메트리가 모두 다각형이면 2개의 다각형이 있는
MULTIPOLYGON
이 반환됩니다.그렇지 않으면 2개의 지오메트리가 있는
GEOMETRYCOLLECTION
이 반환됩니다.
ST_Collect의 두 번째 변형은 지오메트리 열의 지오메트리에서 지오메트리를 생성합니다. 지오메트리의 결정된 반환 순서는 없습니다. 반환된 지오메트리의 순서를 지정하려면 WITHIN GROUP (ORDER BY ...) 절을 지정합니다. 이 변형은 다음과 같이 작동합니다.
입력 집계 표현식의 NULL이 아닌 모든 행이 점이면 집계 표현식의 모든 점을 포함하는 다중 점이 반환됩니다.
집계 표현식의 NULL이 아닌 모든 행이 라인스트링이면 집계 표현식의 모든 라인스트링을 포함하는 다중 라인스트링이 반환됩니다.
집계 표현식의 NULL이 아닌 모든 행이 다각형이면 집계 표현식의 모든 다각형을 포함하는 다중 다각형이 반환됩니다.
그렇지 않으면 집계 표현식의 모든 지오메트리를 포함하는
GEOMETRYCOLLECTION
이 반환됩니다.
ST_Collect는 입력 지오메트리와 동일한 차원의 지오메트리를 반환합니다. 모든 입력 지오메트리의 차원이 같아야 합니다.
구문
ST_Collect(geom1, geom2)
ST_Collect(aggregate_expression) [WITHIN GROUP (ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...])]
인수
- geom1
-
GEOMETRY
데이터 형식의 값 또는GEOMETRY
형식으로 계산되는 표현식입니다. - geom2
-
GEOMETRY
데이터 형식의 값 또는GEOMETRY
형식으로 계산되는 표현식입니다. - aggregate_expression
-
GEOMETRY
데이터 형식의 열 또는GEOMETRY
형식으로 계산되는 표현식입니다. - [WITHIN GROUP (ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...])]
-
(옵션) 집계된 값의 정렬 순서를 지정하는 절입니다. ORDER BY 절에는 정렬 표현식 목록이 포함되어 있습니다. 정렬 표현식은 열 이름과 같은 쿼리 선택 목록의 유효한 정렬 표현식과 유사한 표현식입니다. 오름차순(
ASC
) 또는 내림차순(DESC
)을 지정할 수 있습니다. 기본값은ASC
입니다.
반환 타입
하위 유형 MULTIPOINT
, MULTILINESTRING
, MULTIPOLYGON
또는 GEOMETRYCOLLECTION
의 GEOMETRY
입니다.
반환된 지오메트리의 SRID(공간 참조 시스템 식별자) 값은 입력 지오메트리의 SRID 값입니다.
geom1 또는 geom2가 null이면 null이 반환됩니다.
aggregate_expression의 모든 행이 null이면 null이 반환됩니다.
geom1이 null이면 geom2의 복사본이 반환됩니다. 마찬가지로 geom2가 null이면 geom1의 복사본이 반환됩니다.
geom1과 geom2의 SRID 값이 다른 경우 오류가 반환됩니다.
aggregate_expression에 있는 두 지오메트리의 SRID 값이 다르면 오류가 반환됩니다.
반환된 지오메트리가 최대 크기 GEOMETRY
보다 크면 오류가 반환됩니다.
geom1과 geom2의 차원이 다르면 오류가 반환됩니다.
aggregate_expression에 있는 두 지오메트리의 차원이 다르면 오류가 반환됩니다.
예제
다음 SQL은 2개의 지오메트리를 포함하는 지오메트리 컬렉션을 반환합니다.
SELECT ST_AsText(ST_Collect(ST_GeomFromText('LINESTRING(0 0,1 1)'), ST_GeomFromText('POLYGON((10 10,20 10,10 20,10 10))')));
st_astext
-----------
GEOMETRYCOLLECTION(LINESTRING(0 0,1 1),POLYGON((10 10,20 10,10 20,10 10)))
다음 SQL은 테이블의 모든 지오메트리를 지오메트리 컬렉션으로 수집합니다.
WITH tbl(g) AS (SELECT ST_GeomFromText('POINT(1 2)', 4326) UNION ALL SELECT ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL SELECT ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL SELECT NULL::geometry UNION ALL SELECT ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326)) SELECT ST_AsEWKT(ST_Collect(g)) FROM tbl;
st_astext
-----------
SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(0 0,10 0),MULTIPOINT((13 4),(8 5),(4 4)),POLYGON((0 0,10 0,0 10,0 0)))
다음 SQL은 ID 열별로 그룹화되고 이 ID로 정렬된 테이블의 모든 지오메트리를 수집합니다. 이 예에서 결과 지오메트리는 다음과 같이 ID별로 그룹화됩니다.
id 1 – 다중 점의 점.
id 2 – 다중 라인스트링의 라인스트링.
id 3 – 지오메트리 컬렉션의 혼합 하위 유형.
id 4 – 다중 다각형의 다각형.
id 5 – null이고 결과는 null임.
WITH tbl(id, g) AS (SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry) SELECT id, ST_AsEWKT(ST_Collect(g)) FROM tbl GROUP BY id ORDER BY id;
id | st_asewkt
----+-----------------------------------------------------------------------------------------------------------
1 | SRID=4326;MULTIPOINT((1 2),(4 5))
2 | SRID=4326;MULTILINESTRING((0 0,10 0),(10 0,20 -5))
3 | SRID=4326;GEOMETRYCOLLECTION(MULTIPOINT((13 4),(8 5),(4 4)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5)))
4 | SRID=4326;MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((20 20,20 30,30 20,20 20)))
5 |
다음 SQL은 테이블의 모든 지오메트리를 지오메트리 컬렉션에 수집합니다. 결과는 id
의 내림차순으로 정렬된 다음 최소 및 최대 x 좌표에 따라 사전순으로 정렬됩니다.
WITH tbl(id, g) AS ( SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry) SELECT ST_AsEWKT(ST_Collect(g) WITHIN GROUP (ORDER BY id DESC, ST_XMin(g), ST_XMax(g))) FROM tbl;
st_asewkt
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SRID=4326;GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),POLYGON((20 20,20 30,30 20,20 20)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5)),MULTIPOINT((13 4),(8 5),(4 4)),LINESTRING(0 0,10 0),LINESTRING(10 0,20 -5),POINT(1 2),POINT(4 5)