

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# ST\$1Collect
<a name="ST_Collect-function"></a>

ST\$1Collect には 2 つの変形があります。1 つは 2 つのジオメトリを受け入れ、もう 1 つは集約式を受け入れます。

ST\$1Collect の 1 番目の変形は、入力ジオメトリからジオメトリを作成します。入力ジオメトリの順序は保持されます。このバリアントは次のように動作します。
+ 両方の入力ジオメトリがポイントの場合、2 つのポイントを持つ `MULTIPOINT` が返されます。
+ 両方の入力ジオメトリがライン文字列である場合、2 つのライン文字列を持つ `MULTILINESTRING` が返されます。
+ 両方の入力ジオメトリがポリゴンの場合、2 つのポリゴンを持つ `MULTIPOLYGON` が返されます。
+ それ以外の場合は、2 つの入力ジオメトリを持つ `GEOMETRYCOLLECTION` が返されます。

ST\$1Collect の 2 番目の変形は、ジオメトリ列のジオメトリからジオメトリを作成します。ジオメトリの戻り順序が決定されていません。WITHIN GROUP (ORDER BY...) 句を指定して、返されるジオメトリの順序を指定します。このバリアントは次のように動作します。
+ 入力集計式の NULL 以外の行がすべてポイントである場合、集計式のすべてのポイントを含むマルチポイントが返されます。
+ 集約式の NULL 以外の行がすべてライン文字列の場合、集約式内のすべてのライン文字列を含むマルチライン文字列が返されます。
+ 集約式内の NULL 以外の行がすべてポリゴンの場合、その結果は、集約式内のすべてのポリゴンを含むマルチポリゴンが返されます。
+ それ以外の場合は、集計式のすべてのジオメトリを含む `GEOMETRYCOLLECTION` が返されます。

ST\$1Collect は、入力ジオメトリと同じディメンションのジオメトリを返します。入力ジオメトリはすべて、同じディメンションにする必要があります。

## 構文
<a name="ST_Collect-function-syntax"></a>

```
ST_Collect(geom1, geom2)
```

```
ST_Collect(aggregate_expression)  [WITHIN GROUP (ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...])]
```

## 引数
<a name="ST_Collect-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *aggregate\$1expression*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の列。

 [WITHIN GROUP (ORDER BY *sort\$1expression1* [ASC \$1 DESC] [, *sort\$1expression2* [ASC \$1 DESC] ...])]   
オプションの集計値のソート順を指定する句。ORDER BY 句には、ソート式のリストが含まれています。ソート式は、列名など、クエリ選択リストの有効なソート式に似た式です。昇順 (`ASC`) または降順 (`DESC`) の順を指定できます。デフォルトは `ASC` です。

## 戻り型
<a name="ST_Collect-function-return"></a>

サブタイプ `MULTIPOINT`、`MULTILINESTRING`、`MULTIPOLYGON`、または `GEOMETRYCOLLECTION` の `GEOMETRY`。

返されたジオメトリの空間リファレンス識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

*geom1* または *geom2* が両方とも null の場合、null が返されます。

*aggregate\$1expression* のすべての行が null の場合、null が返されます。

*geom1* が null の場合、*geom2* のコピーが返されます。同様に、*geom2* が null の場合、*geom1* のコピーが返されます。

*geom1* および *geom2* の SRID 値が異なる場合、エラーが返されます。

*aggregate\$1expression* の 2 つのジオメトリの SRID 値が異なる場合、エラーが返されます。

返されるジオメトリが `GEOMETRY` の最大サイズよりも大きい場合、エラーが返されます。

*geom1* と *geom2* が異なるディメンションの場合は、エラーが返されます。

*aggregate\$1expression* 内の 2 つのジオメトリの ディメンションが異なる場合、エラーが返されます。

## 例
<a name="ST_Collect-function-examples"></a>

次の 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)
```