> ## 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.

> SimpleAggregateFunction 数据类型的文档

# SimpleAggregateFunction 类型

<div id="description">
  ## 描述
</div>

`SimpleAggregateFunction` 数据类型存储聚合函数的中间状态，
但不像 [`AggregateFunction`](/zh/reference/data-types/aggregatefunction)
类型那样存储其完整状态。

这种优化可应用于满足以下性质的函数：

> 对行集 `S1 UNION ALL S2` 应用函数 `f` 的结果，可以通过分别对行集的各个部分应用 `f`，然后再
> 对这些结果应用 `f` 得到：`f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2))`。

这一性质保证了，部分聚合结果就足以计算
合并后的结果，因此我们无需存储和处理任何额外数据。例如，
`min` 或 `max` 函数的结果无需额外步骤即可从中间结果
计算出最终结果，而 `avg` 函数则需要跟踪总和与计数，
然后在合并中间状态的最终 `Merge` 步骤中将二者相除以得到
平均值。

聚合函数值通常通过调用聚合函数，并在函数名后附加
[`-SimpleState`](/zh/reference/functions/aggregate-functions/combinators#-simplestate) 组合器来生成。

<div id="syntax">
  ## 语法
</div>

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

**参数**

* `aggregate_function_name` - 聚合函数名称。
* `Type` - 聚合函数参数的类型。

<div id="supported-functions">
  ## 支持的函数
</div>

支持以下聚合函数：

* [`any`](/zh/reference/functions/aggregate-functions/any)
* [`any_respect_nulls`](/zh/reference/functions/aggregate-functions/any)
* [`anyLast`](/zh/reference/functions/aggregate-functions/anyLast)
* [`anyLast_respect_nulls`](/zh/reference/functions/aggregate-functions/anyLast)
* [`min`](/zh/reference/functions/aggregate-functions/min)
* [`max`](/zh/reference/functions/aggregate-functions/max)
* [`sum`](/zh/reference/functions/aggregate-functions/sum)
* [`sumWithOverflow`](/zh/reference/functions/aggregate-functions/sumWithOverflow)
* [`groupBitAnd`](/zh/reference/functions/aggregate-functions/groupBitAnd)
* [`groupBitOr`](/zh/reference/functions/aggregate-functions/groupBitOr)
* [`groupBitXor`](/zh/reference/functions/aggregate-functions/groupBitXor)
* [`groupArrayArray`](/zh/reference/functions/aggregate-functions/groupArrayArray)
* [`groupUniqArrayArray`](/zh/reference/functions/aggregate-functions/groupUniqArray)
* [`groupUniqArrayArrayMap`](/zh/reference/functions/aggregate-functions/combinators#-map)
* [`sumMap` (`sumMappedArrays`)](/zh/reference/functions/aggregate-functions/sumMap)
* [`minMap` (`minMappedArrays`)](/zh/reference/functions/aggregate-functions/minMap)
* [`maxMap` (`maxMappedArrays`)](/zh/reference/functions/aggregate-functions/maxMap)

<Note>
  `SimpleAggregateFunction(func, Type)` 的值具有相同的 `Type`，
  因此不同于 `AggregateFunction` 类型，无需应用
  `-Merge`/`-State` 组合器。

  对于相同的聚合函数，`SimpleAggregateFunction` 类型的性能优于 `AggregateFunction` 类型。
</Note>

<div id="example">
  ## 示例
</div>

```sql theme={null}
CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;
```

<div id="related-content">
  ## 相关内容
</div>

* 博客：[ClickHouse 中聚合组合器的用法](https://clickhouse.com/blog/aggregate-functions-combinators-in-clickhouse-for-arrays-maps-and-states)    - 博客：[ClickHouse 中聚合组合器的用法](https://clickhouse.com/blog/aggregate-functions-combinators-in-clickhouse-for-arrays-maps-and-states)
* [AggregateFunction](/zh/reference/data-types/aggregatefunction) 类型。
