-If
sumIf(column, cond), countIf(cond), avgIf(x, cond), quantilesTimingIf(level1, level2)(x, cond), argMinIf(arg, val, cond) e assim por diante.
Com funções de agregação condicionais, você pode calcular agregados para várias condições ao mesmo tempo, sem usar subconsultas nem JOINs. Por exemplo, funções de agregação condicionais podem ser usadas para implementar a funcionalidade de comparação de segmentos.
-Array
sumArray(arr) - Soma todos os elementos de todos os arrays ‘arr’. Neste exemplo, também poderia ser escrito de forma mais simples: sum(arraySum(arr)).
Exemplo 2: uniqArray(arr) – Conta o número de elementos únicos em todos os arrays ‘arr’. Isso também poderia ser feito de uma forma mais simples: uniq(arrayJoin(arr)), mas nem sempre é possível adicionar ‘arrayJoin’ a uma consulta.
-If e -Array podem ser combinados. No entanto, ‘Array’ deve vir primeiro e, depois, ‘If’. Exemplos: uniqArrayIf(arr, cond), quantilesTimingArrayIf(level1, level2)(arr, cond). Devido a essa ordem, o argumento ‘cond’ não será um array.
-Map
-SimpleState
x— Parâmetros da função de agregação.
SimpleAggregateFunction(...).
Exemplo
Query
Response
-State
uniq, isso é a tabela hash usada para calcular o número de valores únicos). Trata-se de um AggregateFunction(...) que pode ser usado em processamento adicional ou armazenado em uma tabela para concluir a agregação depois.
Observe que -MapState não é invariante para os mesmos dados, pois a ordem dos dados no estado intermediário pode mudar, embora isso não afete a ingestão desses dados.
- AggregatingMergeTree como mecanismo de tabela.
- A função finalizeAggregation.
- A função runningAccumulate.
- O combinador -Merge.
- O combinador -MergeState.
-Merge
-MergeState
-ForEach
sumForEach para os arrays [1, 2], [3, 4, 5] e [6, 7] retorna o resultado [10, 13, 5] após somar os elementos correspondentes dos arrays.
-Tuple
-Tuple pode ser acrescentado a qualquer função de agregação. A função combinada recebe um argumento do tipo Tuple para cada argumento da função de agregação subjacente; todas as tuplas devem ter o mesmo número de elementos. A agregação é aplicada independentemente em cada posição do elemento, recebendo o elemento correspondente de cada Tuple, e retorna uma Tuple com os resultados.
Se a primeira Tuple de entrada tiver nomes de elementos explícitos, eles serão preservados no resultado.
Funções de agregação que tratam valores NULL por conta própria (anyRespectNulls, anyLastRespectNulls, o modificador RESPECT NULLS) não oferecem suporte ao tipo Nullable(Tuple(...)) como argumento; use elementos Nullable em vez disso.
Sintaxe
tuple1[, tuple2, ...]— Colunas do tipoTuple, uma para cada argumento da função de agregação subjacente, todas com o mesmo número de elementos. Cada elemento deve ser de um tipo compatível com a função de agregação subjacente na posição correspondente do argumento.
- Uma
Tuplecontendo o resultado da aplicação da função de agregação a cada elemento independentemente.
Tuple(aggFunction(element1), aggFunction(element2), ...).
Exemplo
Consulta:
GROUP BY:
Tuple fornece um argumento para a função subjacente, e os elementos são combinados de acordo com a posição:
a1 e b1 são anticorrelacionados, enquanto a2 e b2 são proporcionais, portanto o resultado é (-1, 1).
-Tuple pode ser combinado com outros combinadores, como -If. Por exemplo: sumTupleIf(tuple_column, cond).
-Distinct
sum(DISTINCT x) (ou sumDistinct(x)), groupArray(DISTINCT x) (ou groupArrayDistinct(x)), corrStable(DISTINCT x, y) (ou corrStableDistinct(x, y)) e assim por diante.
-OrDefault
-OrDefault pode ser usado com outros combinadores.
Sintaxe
x— Parâmetros da função de agregação.
Query
Response
-OrDefault com outros combinadores. Isso é útil quando a função de agregação não aceita uma entrada vazia.
Query
Response
-OrNull
-OrNull pode ser usado com outros combinadores.
Sintaxe
x— Parâmetros da função de agregação.
- O resultado da função de agregação, convertido para o tipo de dado
Nullable. NULL, se não houver nada para agregar.
Nullable(tipo de retorno da função de agregação).
Exemplo
Adicione -orNull ao final do nome da função de agregação.
Query
Response
-OrNull também pode ser usado com outros combinadores. Isso é útil quando a função de agregação não aceita entrada vazia.
Query
Response
-Resample
start— Valor inicial de todo o intervalo necessário para os valores deresampling_key.stop— Valor final de todo o intervalo necessário para os valores deresampling_key. O intervalo completo não inclui o valorstop[start, stop).step— Passo para separar todo o intervalo em subintervalos. AaggFunctioné executada em cada um desses subintervalos de forma independente.resampling_key— Coluna cujos valores são usados para separar os dados em intervalos.aggFunction_params— Parâmetros deaggFunction.
- Array de resultados de
aggFunctionpara cada subintervalo.
people com os seguintes dados:
[30,60) e [60,75). Como usamos representação inteira para a idade, obtemos idades nos intervalos [30, 59] e [60,74].
Para agregar nomes em um Array, usamos a função de agregação groupArray. Ela recebe um argumento. No nosso caso, é a coluna name. A função groupArrayResample deve usar a coluna age para agregar nomes por idade. Para definir os intervalos necessários, passamos os argumentos 30, 75, 30 para a função groupArrayResample.
John ficou fora da amostra porque é jovem demais. As outras pessoas foram distribuídas de acordo com os intervalos de idade especificados.
Agora, vamos contar o número total de pessoas e a média salarial delas nos intervalos de idade especificados.
-ArgMin
sumArgMin(column, expr), countArgMin(expr), avgArgMin(x, expr) e assim por diante.