> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentación del tipo de datos AggregateFunction en ClickHouse, que almacena estados intermedios de las funciones de agregación

# Tipo AggregateFunction

<div id="description">
  ## Descripción
</div>

Todas las [funciones de agregación](/es/reference/functions/aggregate-functions/index) de ClickHouse tienen
un estado intermedio específico de la implementación que puede serializarse como un
tipo de datos `AggregateFunction` y almacenarse en una tabla. Esto suele hacerse
mediante una [vista materializada](/es/reference/statements/create/view).

Hay dos [combinadores](/es/reference/functions/aggregate-functions/combinators)
de funciones de agregación que se usan habitualmente con el tipo `AggregateFunction`:

* El [combinador de funciones de agregación](/es/reference/functions/aggregate-functions/combinators#-state) \[`-State`], que, al añadirse al nombre de una función de agregación,
  produce estados intermedios de `AggregateFunction`.
* El [combinador de funciones de agregación](/es/reference/functions/aggregate-functions/combinators#-merge) \[`-Merge`], que se utiliza para obtener el resultado final de una agregación
  a partir de los estados intermedios.

<div id="syntax">
  ## Sintaxis
</div>

```sql theme={null}
AggregateFunction(aggregate_function_name, types_of_arguments...)
```

**Parámetros**

* `aggregate_function_name` - El nombre de una función de agregación. Si la función
  es paramétrica, también se deben especificar sus parámetros.
* `types_of_arguments` - Los tipos de los argumentos de la función de agregación.

por ejemplo:

```sql theme={null}
CREATE TABLE t
(
    column1 AggregateFunction(uniq, UInt64),
    column2 AggregateFunction(anyIf, String, UInt8),
    column3 AggregateFunction(quantiles(0.5, 0.9), UInt64)
) ENGINE = ...
```

<div id="usage">
  ## Uso
</div>

<div id="data-insertion">
  ### Inserción de datos
</div>

Para insertar datos en una tabla con columnas de tipo `AggregateFunction`, puede
usar `INSERT SELECT` con funciones de agregación y el
combinador de funciones de agregación
[`-State`](/es/reference/functions/aggregate-functions/combinators#-state).

Por ejemplo, para insertar en columnas de tipo `AggregateFunction(uniq, UInt64)` y
`AggregateFunction(quantiles(0.5, 0.9), UInt64)`, usaría las siguientes
funciones de agregación con combinadores.

```sql theme={null}
uniqState(UserID)
quantilesState(0.5, 0.9)(SendTiming)
```

A diferencia de las funciones `uniq` y `quantiles`, `uniqState` y `quantilesState`
(con el combinador `-State` añadido) devuelven el estado en lugar del valor final.
En otras palabras, devuelven un valor del tipo `AggregateFunction`.

En los resultados de la consulta `SELECT`, los valores del tipo `AggregateFunction` tienen
representaciones binarias específicas de la implementación en todos los formatos de salida
de ClickHouse.

Hay una configuración especial de nivel de sesión, `aggregate_function_input_format`, que permite construir el estado a partir de los valores de entrada.
Admite los siguientes formatos:

* `state` - cadena binaria con el estado serializado (valor predeterminado).
  Si genera un volcado de datos, por ejemplo, en el formato `TabSeparated` con una consulta `SELECT`,
  ese volcado puede volver a cargarse con la consulta `INSERT`.
* `value` - el formato esperará un único valor del argumento de la función de agregación o, en el caso de varios argumentos, una tupla con ellos; este valor se deserializará para formar el estado correspondiente
* `array` - el formato esperará un Array de valores, como se describe en la opción `value` anterior; todos los elementos del array se agregarán para formar el estado

<div id="data-selection">
  ### Selección de datos
</div>

Al seleccionar datos de una tabla `AggregatingMergeTree`, use la cláusula `GROUP BY`
y las mismas funciones de agregación que al insertar los datos, pero use el
combinador [`-Merge`](/es/reference/functions/aggregate-functions/combinators#-merge).

Una función de agregación con el combinador `-Merge` añadido toma un conjunto de
estados, los combina y devuelve el resultado de la agregación completa de los datos.

Por ejemplo, las dos consultas siguientes devuelven el mismo resultado:

```sql theme={null}
SELECT uniq(UserID) FROM table

SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP BY RegionID)
```

<div id="usage-example">
  ## Ejemplo de uso
</div>

Consulte la descripción del motor [AggregatingMergeTree](/es/reference/engines/table-engines/mergetree-family/aggregatingmergetree).

<div id="related-content">
  ## Contenido relacionado
</div>

* Blog: [Uso de combinadores de agregación en ClickHouse](https://clickhouse.com/blog/aggregate-functions-combinators-in-clickhouse-for-arrays-maps-and-states)
* Combinador [MergeState](/es/reference/functions/aggregate-functions/combinators#-mergestate).
* Combinador [State](/es/reference/functions/aggregate-functions/combinators#-state).
