-If
sumIf(column, cond), countIf(cond), avgIf(x, cond), quantilesTimingIf(level1, level2)(x, cond), argMinIf(arg, val, cond) и так далее.
С помощью условных агрегатных функций можно вычислять агрегаты сразу для нескольких условий, не используя подзапросы и JOIN. Например, условные агрегатные функции можно использовать для реализации сравнения сегментов.
-Array
sumArray(arr) — суммирует все элементы всех массивов ‘arr’. В данном случае это можно было бы записать проще: sum(arraySum(arr)).
Пример 2: uniqArray(arr) — подсчитывает количество уникальных элементов во всех массивах ‘arr’. Это также можно было бы сделать проще: uniq(arrayJoin(arr)), но добавить ‘arrayJoin’ в запрос можно не всегда.
-If и -Array можно комбинировать. Однако ‘Array’ должно идти первым, а затем ‘If’. Примеры: uniqArrayIf(arr, cond), quantilesTimingArrayIf(level1, level2)(arr, cond). Из-за такого порядка аргумент ‘cond’ не будет массивом.
-Map
-SimpleState
x— Параметры агрегатной функции.
SimpleAggregateFunction(...).
Пример
Query
Response
-State
uniq это хеш-таблица для вычисления числа уникальных значений). Это AggregateFunction(...), которую можно использовать для дальнейшей обработки или сохранить в таблице, чтобы завершить агрегацию позже.
Обратите внимание: -MapState не является инвариантным для одних и тех же данных, поскольку порядок данных в промежуточном состоянии может меняться, хотя это не влияет на ингестию этих данных.
- движок таблицы AggregatingMergeTree.
- функцию finalizeAggregation.
- функцию runningAccumulate.
- комбинатор -Merge.
- комбинатор -MergeState.
-Merge
-MergeState
-ForEach
sumForEach для массивов [1, 2], [3, 4, 5]and[6, 7] возвращает результат [10, 13, 5] после суммирования соответствующих элементов.
-Distinct
sum(DISTINCT x) (или sumDistinct(x)), groupArray(DISTINCT x) (или groupArrayDistinct(x)), corrStable(DISTINCT x, y) (или corrStableDistinct(x, y)) и так далее.
-OrDefault
-OrDefault можно использовать с другими комбинаторами.
Синтаксис
x— Параметры агрегатной функции.
Query
Response
-OrDefault можно использовать с другими комбинаторами. Это полезно, когда агрегатная функция не принимает пустой ввод.
Query
Response
-OrNull
-OrNull можно использовать с другими комбинаторами.
Синтаксис
x— параметры агрегатной функции.
- Результат агрегатной функции, приведённый к типу данных
Nullable. NULL, если агрегировать нечего.
Nullable(aggregate function return type).
Пример
Добавьте -orNull в конец имени агрегатной функции.
Query
Response
-OrNull можно использовать с другими комбинаторами. Это полезно, когда агрегатная функция не принимает пустой вход.
Query
Response
-Resample
start— Начальное значение всего требуемого интервала для значенийresampling_key.stop— Конечное значение всего требуемого интервала для значенийresampling_key. Этот интервал не включает значениеstop[start, stop).step— Шаг разбиения всего интервала на подынтервалы.aggFunctionвыполняется для каждого из этих подынтервалов независимо.resampling_key— Столбец, значения которого используются для разбиения данных на интервалы.aggFunction_params— ПараметрыaggFunction.
- Массив результатов
aggFunctionдля каждого подынтервала.
people со следующими данными:
[30,60) и [60,75). Поскольку возраст представлен целыми числами, получаем интервалы возрастов [30, 59] и [60,74].
Чтобы агрегировать имена в массив, используем агрегатную функцию groupArray. Она принимает один аргумент. В нашем случае это столбец name. Функция groupArrayResample должна использовать столбец age, чтобы агрегировать имена по возрасту. Чтобы задать нужные интервалы, передаём в функцию groupArrayResample аргументы 30, 75, 30.
John не попадает в выборку, потому что он слишком молод. Остальные люди распределены по указанным возрастным интервалам.
Теперь посчитаем общее число людей и их среднюю заработную плату в указанных возрастных интервалах.
-ArgMin
sumArgMin(column, expr), countArgMin(expr), avgArgMin(x, expr) и так далее.