

 Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del parche 198. Las UDF de Python existentes seguirán funcionando hasta el 30 de junio de 2026. Para obtener más información, consulte la [publicación del 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 tiene dos variantes. Una acepta dos geometrías y otra acepta una expresión agrupada. 

La primera variante de ST\$1Collect crea una geometría a partir de las geometrías de entrada. El orden de las geometrías de entrada se conserva. Esta variante funciona de la siguiente manera: 
+ Si ambas geometrías de entrada son puntos, se devuelve un `MULTIPOINT` con dos puntos. 
+ Si ambas geometrías de entrada son cadenas de línea, se devuelve una `MULTILINESTRING` con dos cadenas de línea. 
+ Si ambas geometrías de entrada son polígonos, se devuelve un `MULTIPOLYGON` con dos polígonos. 
+ De lo contrario, se devuelve una `GEOMETRYCOLLECTION` con dos geometrías de entrada. 

La segunda variante de ST\$1Collect crea una geometría a partir de las geometrías en una columna de geometría. No hay un orden de devolución de las geometrías determinado. Especifique la cláusula WITHIN GROUP (ORDER BY ...) para especificar el orden de las geometrías devueltas. Esta variante funciona de la siguiente manera: 
+ Si todas las filas que no son NULL de la expresión agrupada de entrada son puntos, se devuelve un multipunto que contiene todos los puntos de la expresión agrupada. 
+ Si todas las filas que no son NULL de la expresión agrupada son cadenas de línea, se devuelve una cadena de varias líneas que contiene todas las cadenas de línea de la expresión agrupada. 
+ Si todas las filas que no son NULL de la expresión agrupada son polígonos, el resultado que se devuelve es un multipolígono que contiene todos los polígonos de la expresión agrupada. 
+ De lo contrario, se devuelve una `GEOMETRYCOLLECTION` que contiene todas las geometrías de la expresión agrupada. 

ST\$1Collect devuelve una geometría de la misma dimensión que las geometrías de entrada. Todas las geometrías de entrada deben ser de la misma dimensión.

## Sintaxis
<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*   
Un valor de tipo de datos `GEOMETRY` o una expresión que toma el valor de un tipo `GEOMETRY`. 

 *geom2*   
Un valor de tipo de datos `GEOMETRY` o una expresión que toma el valor de un tipo `GEOMETRY`. 

 *expresión\$1de\$1agregación*   
Una columna de tipo de datos `GEOMETRY` o una expresión que toma el valor de un tipo `GEOMETRY`. 

 [WITHIN GROUP (ORDER BY *sort\$1expression1* [ASC \$1 DESC] [, *sort\$1expression2* [ASC \$1 DESC] ...])]   
Una cláusula opcional que especifica el orden de los valores agregados. La cláusula ORDER BY contiene una lista de expresiones de ordenación. Las expresiones de ordenación son expresiones similares a las expresiones de ordenación válidas de una lista de selección de la consulta, como un nombre de columna. Puede especificar un orden ascendente (`ASC`) o descendente (`DESC`). El valor predeterminado es `ASC`. 

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

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

El valor del identificador de sistema de referencia espacial (SRID) de la geometría devuelta es el valor SRID de las geometrías de entrada de datos. 

Si tanto *geom1* como *geom2* son null, se devuelve el valor null. 

Si todas las filas de *aggregate\$1expression* son null, se devuelve el valor null. 

Si *geom1* es null, se devuelve una copia de *geom2*. Del mismo modo, si *geom2* es null, se devuelve una copia de *geom1*.

Si *geom1* y *geom2* tienen diferentes valores SRID, se devuelve un error. 

Si dos geometrías en *aggregate\$1expression* tienen diferentes valores SRID, se devuelve un error. 

Si el tamaño de la geometría devuelta es mayor que el tamaño máximo de una `GEOMETRY`, se devuelve un error. 

Si *geom1* y *geom2* tienen diferentes dimensiones, se devuelve un error. 

Si dos geometrías en *aggregate\$1expression* tienen diferentes dimensiones, se devuelve un error. 

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

El siguiente SQL devuelve una colección de geometría que contiene las dos geometrías 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)))
```

El siguiente SQL recopila todas las geometrías de una tabla en una colección de geometría. 

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

El siguiente SQL recopila todas las geometrías de la tabla agrupadas por la columna id y ordenadas por este ID. En este ejemplo, las geometrías resultantes se agrupan por ID de la siguiente manera: 
+ id 1: puntos en un multipunto.
+ id 2: cadenas de línea en una cadena de varias líneas.
+ id 3: subtipos mixtos en una colección de geometría.
+ id 4: polígonos en un multipolígono.
+ id 5: null y el resultado es 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 |
```

El siguiente SQL recopila todas las geometrías de una tabla en una colección de geometría. Los resultados se ordenan de forma descendente por `id` y, luego, lexicográficamente, en función de sus coordenadas x mínimas y 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)
```