Loading...
MySQL 9.5 Reference Manual 9.5의 14.16.12 Spatial Aggregate Functions의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
MySQL은 값 집합에 대해 계산을 수행하는 집계 함수를 지원합니다. 이러한 함수에 대한 일반적인 정보는 Section 14.19.1, “Aggregate Function Descriptions”을 참조하십시오. 이 섹션에서는 ST_Collect() 공간 집계 함수를 설명합니다.
ST_Collect()는 구문 설명에서 선택적 OVER 절을 나타내는 [over_clause]에 의해 표시되듯이 윈도 함수로 사용할 수 있습니다. _over_clause_는 Section 14.20.2, “Window Function Concepts and Syntax”에 설명되어 있으며, 그 섹션에는 윈도 함수 사용에 대한 기타 정보도 포함되어 있습니다.
geometry 값들을 집계하여 단일 geometry collection 값을 반환합니다. DISTINCT 옵션을 사용하면, 서로 다른 geometry 인수들의 집계를 반환합니다.
다른 집계 함수와 마찬가지로, GROUP BY를 사용하여 인수를 서브셋으로 그룹화할 수 있습니다. ST_Collect()는 각 서브셋에 대해 집계 값을 반환합니다.
_over_clause_가 존재하면 이 함수는 윈도 함수로 실행됩니다. _over_clause_는 Section 14.20.2, “Window Function Concepts and Syntax”에 설명된 그대로입니다. 윈도잉을 지원하는 대부분의 집계 함수와는 대조적으로, ST_Collect()는 DISTINCT와 함께 _over_clause_의 사용을 허용합니다.
ST_Collect()는 인수를 다음과 같이 처리합니다:
NULL 인수는 무시됩니다.
모든 인수가 NULL이거나 집계 결과가 비어 있으면, 반환 값은 NULL입니다.
어떤 geometry 인수라도 구문상 올바르게 구성된 geometry가 아니면, ER_GIS_INVALID_DATA 에러가 발생합니다.
어떤 geometry 인수라도 정의되지 않은 공간 참조 시스템(SRS)에 있는 구문상 올바르게 구성된 geometry인 경우, ER_SRS_NOT_FOUND 에러가 발생합니다.
여러 geometry 인수가 있고 그 인수들이 동일한 SRS에 있으면, 반환 값은 그 SRS에 있습니다. 해당 인수들이 동일한 SRS에 있지 않으면, ER_GIS_DIFFERENT_SRIDS_AGGREGATION 에러가 발생합니다.
결과는 가능한 한 가장 좁은 MultiXxx 또는 GeometryCollection 값이며, 결과 타입은 non-NULL geometry 인수로부터 다음과 같이 결정됩니다:
모든 인수가 Point 값이면, 결과는 MultiPoint 값입니다.
모든 인수가 LineString 값이면, 결과는 MultiLineString 값입니다.
모든 인수가 Polygon 값이면, 결과는 MultiPolygon 값입니다.
그렇지 않으면, 인수들은 geometry 타입의 혼합이며 결과는 GeometryCollection 값입니다.
다음 예제 데이터 세트는 연도별 및 제조 위치별 가상의 제품을 보여줍니다:
1CREATE TABLE product ( 2 year INTEGER, 3 product VARCHAR(256), 4 location Geometry 5); 6 7INSERT INTO product 8(year, product, location) VALUES 9(2000, "Calculator", ST_GeomFromText('point(60 -24)',4326)), 10(2000, "Computer" , ST_GeomFromText('point(28 -77)',4326)), 11(2000, "Abacus" , ST_GeomFromText('point(28 -77)',4326)), 12(2000, "TV" , ST_GeomFromText('point(38 60)',4326)), 13(2001, "Calculator", ST_GeomFromText('point(60 -24)',4326)), 14(2001, "Computer" , ST_GeomFromText('point(28 -77)',4326));
이 데이터 세트에 대해 ST_Collect()를 사용하는 몇 가지 예제 쿼리는 다음과 같습니다:
1mysql> SELECT ST_AsText(ST_Collect(location)) AS result 2 FROM product; 3+------------------------------------------------------------------+ 4| result | 5+------------------------------------------------------------------+ 6| MULTIPOINT((60 -24),(28 -77),(28 -77),(38 60),(60 -24),(28 -77)) | 7+------------------------------------------------------------------+ 8 9mysql> SELECT ST_AsText(ST_Collect(DISTINCT location)) AS result 10 FROM product; 11+---------------------------------------+ 12| result | 13+---------------------------------------+ 14| MULTIPOINT((60 -24),(28 -77),(38 60)) | 15+---------------------------------------+ 16 17mysql> SELECT year, ST_AsText(ST_Collect(location)) AS result 18 FROM product GROUP BY year; 19+------+------------------------------------------------+ 20| year | result | 21+------+------------------------------------------------+ 22| 2000 | MULTIPOINT((60 -24),(28 -77),(28 -77),(38 60)) | 23| 2001 | MULTIPOINT((60 -24),(28 -77)) | 24+------+------------------------------------------------+ 25 26mysql> SELECT year, ST_AsText(ST_Collect(DISTINCT location)) AS result 27 FROM product GROUP BY year; 28+------+---------------------------------------+ 29| year | result | 30+------+---------------------------------------+ 31| 2000 | MULTIPOINT((60 -24),(28 -77),(38 60)) | 32| 2001 | MULTIPOINT((60 -24),(28 -77)) | 33+------+---------------------------------------+ 34 35# selects nothing 36mysql> SELECT ST_Collect(location) AS result 37 FROM product WHERE year = 1999; 38+--------+ 39| result | 40+--------+ 41| NULL | 42+--------+ 43 44mysql> SELECT ST_AsText(ST_Collect(location) 45 OVER (ORDER BY year, product ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)) 46 AS result 47 FROM product; 48+-------------------------------+ 49| result | 50+-------------------------------+ 51| MULTIPOINT((28 -77)) | 52| MULTIPOINT((28 -77),(60 -24)) | 53| MULTIPOINT((60 -24),(28 -77)) | 54| MULTIPOINT((28 -77),(38 60)) | 55| MULTIPOINT((38 60),(60 -24)) | 56| MULTIPOINT((60 -24),(28 -77)) | 57+-------------------------------+
14.16.11 Spatial GeoJSON Functions
14.16.13 Spatial Convenience Functions