ST_Collect - Amazon Redshift

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 또는 GEOMETRYCOLLECTIONGEOMETRY입니다.

반환된 지오메트리의 SRID(공간 참조 시스템 식별자) 값은 입력 지오메트리의 SRID 값입니다.

geom1 또는 geom2가 null이면 null이 반환됩니다.

aggregate_expression의 모든 행이 null이면 null이 반환됩니다.

geom1이 null이면 geom2의 복사본이 반환됩니다. 마찬가지로 geom2가 null이면 geom1의 복사본이 반환됩니다.

geom1geom2의 SRID 값이 다른 경우 오류가 반환됩니다.

aggregate_expression에 있는 두 지오메트리의 SRID 값이 다르면 오류가 반환됩니다.

반환된 지오메트리가 최대 크기 GEOMETRY보다 크면 오류가 반환됩니다.

geom1geom2의 차원이 다르면 오류가 반환됩니다.

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)