

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](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 tem duas variantes. Um aceita duas geometrias, e outro aceita uma expressão agregada. 

A primeira variante de ST\$1Collect cria uma geometria das geometrias de entrada. A ordem das geometrias de entrada é preservada. Essa variante funciona da seguinte maneira: 
+ Se ambas as geometrias de entrada forem pontos, então um `MULTIPOINT`com dois pontos é retornado. 
+ Se ambas as geometrias de entrada são linestrings, então um `MULTILINESTRING` com dois linestrings é retornado. 
+ Se ambas as geometrias de entrada forem polígonos, então um `MULTIPOLYGON` com dois polígonos é retornado. 
+ Caso contrário, um `GEOMETRYCOLLECTION` com duas geometrias de entrada é retornado. 

A segunda variante de ST\$1Collect cria uma geometria a partir de geometrias em uma coluna de geometria. Não há uma determinada ordem de retorno das geometrias. Especifique a cláusula WITHIN GROUP (ORDER BY...) para especificar a ordem das geometrias retornadas. Essa variante funciona da seguinte maneira: 
+ Se todas as linhas não-NULL na expressão agregada de entrada forem pontos, um multiponto contendo todos os pontos na expressão agregada será retornado. 
+ Se todas as linhas não-NULL na expressão agregada forem linestrings, uma multilinestring contendo todas as linhas na expressão agregada será retornada. 
+ Se todas as linhas não-NULL na expressão agregada forem polígonos, o resultado será um multipolígono contendo todos os polígonos na expressão agregada será retornado. 
+ Caso contrário, uma `GEOMETRYCOLLECTION` contendo todas as geometrias na expressão agregada é retornada. 

O ST\$1Collect retorna a geometria da mesma dimensão que as geometrias de entrada. Todas as geometrias de entrada devem ser da mesma dimensão.

## Sintaxe
<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] ...])]
```

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

 *geom1*   
Um valor de tipo de dados `GEOMETRY` ou uma expressão que é avaliada como um tipo `GEOMETRY`. 

 *geom2*   
Um valor de tipo de dados `GEOMETRY` ou uma expressão que é avaliada como um tipo `GEOMETRY`. 

 *aggregate\$1expression*   
Uma coluna de tipo de dados `GEOMETRY` ou uma expressão que é avaliada como um tipo `GEOMETRY`. 

 [WITHIN GROUP (ORDER BY *sort\$1expression1* [ASC \$1 DESC] [, *sort\$1expression2* [ASC \$1 DESC] ...])]   
Uma cláusula opcional que especifica a ordem de classificação dos valores agregados. A cláusula ORDER BY contém uma lista de expressões de classificação. Expressões de classificação são expressões semelhantes a expressões de classificação válidas em uma lista de seleção de consulta, como um nome de coluna. Você pode especificar por ordem crescente (`ASC`) ou decrescente (`DESC`). O padrão é `ASC`. 

## Tipo de retorno
<a name="ST_Collect-function-return"></a>

`GEOMETRY` de subtipo `MULTIPOINT`, `MULTILINESTRING`, `MULTIPOLYGON`, ou `GEOMETRYCOLLECTION`. 

O valor do identificador do sistema de referência espacial (SRID - spatial reference system identifier) da geometria retornada é o valor do SRID das geometrias de entrada. 

Nulo será retornado se *geom1* ou *geom2* for nulo. 

Se todas as linhas de *aggregate\$1expression* forem nulas, então null será retornado. 

Null será retornado se *geom1* ou *geom2* for nulo. Da mesma forma, se*geom2* for nulo, então uma cópia d o*geom1* é retornado.

Um erro será retornado se *geom1* e *geom2* tiverem valores de SRIDs diferentes. 

Se duas geometrias em *aggregate\$1expression* tiverem valores de SRID diferentes, será retornado um erro. 

Se a geometria retornada for maior que o tamanho máximo de um`GEOMETRY`, um erro será retornado. 

Se *geom1* e *geom2* forem de dimensões diferentes, será retornado um erro. 

Se duas geometrias em *aggregate\$1expression* forem de dimensões diferentes, será retornado um erro. 

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

O SQL a seguir retorna uma coleção de geometrias que contém as duas geometrias de entrada. 

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

O SQL a seguir coleta todas as geometrias de uma tabela em uma coleção de geometria. 

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

O SQL a seguir coleta todas as geometrias na tabela agrupadas pela coluna id e ordenadas por esse ID. Neste exemplo, as geometrias resultantes são agrupadas por ID da seguinte forma: 
+ id 1 — pontos em um multiponto.
+ id 2 — linestrings em uma multilinestring.
+ id 3 — subtipos mistos em uma coleção de geometrias.
+ id 4 — polígonos em um multipolígono.
+ id 5 — nulo e o resultado será 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 |
```

O SQL a seguir coleta todas as geometrias de uma tabela em uma coleção de geometrias. Os resultados são ordenados em ordem decrescente por `id` e, em seguida, lexicograficamente com base em suas coordenadas x mínimas e máximas. 

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