Skip to main content

SimpleAggregateFunction(func, type)

Хранит только текущее значение агрегатной функции и не сохраняет ее полное состояние, как это делает AggregateFunction. Такая оптимизация может быть применена к функциям, которые обладают следующим свойством: результат выполнения функции f к набору строк S1 UNION ALL S2 может быть получен путем выполнения f к отдельным частям набора строк, а затем повторного выполнения f к результатам: f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2)). Это свойство гарантирует, что результатов частичной агрегации достаточно для вычисления комбинированной, поэтому хранить и обрабатывать какие-либо дополнительные данные не требуется.

Чтобы получить промежуточное значение, обычно используются агрегатные функции с суффиксом -SimpleState.

Поддерживаются следующие агрегатные функции:

  • any

  • anyLast

  • min

  • max

  • sum

  • sumWithOverflow

  • groupBitAnd

  • groupBitOr

  • groupBitXor

  • groupArrayArray

  • groupUniqArrayArray

  • sumMap

  • minMap

  • maxMap

    :::note "Примечание"
    Значения `SimpleAggregateFunction(func, Type)` отображаются и хранятся так же, как и `Type`, поэтому комбинаторы [-Merge](/docs/ru/sql-reference/aggregate-functions/combinators#aggregate_functions_combinators-merge) и [-State](/docs/ru/sql-reference/aggregate-functions/combinators#agg-functions-combinator-state) не требуются.

    `SimpleAggregateFunction` имеет лучшую производительность, чем `AggregateFunction` с той же агрегатной функцией.
    :::

    Параметры

  • func — имя агрегатной функции.

  • type — типы аргументов агрегатной функции.

Пример

CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;