-If
sumIf(column, cond), countIf(cond), avgIf(x, cond), quantilesTimingIf(level1, level2)(x, cond), argMinIf(arg, val, cond) y así sucesivamente.
Con las funciones de agregación condicionales, puede calcular agregaciones para varias condiciones a la vez sin usar subconsultas ni JOINs. Por ejemplo, las funciones de agregación condicionales pueden usarse para implementar la funcionalidad de comparación de segmentos.
-Array
Array(T) (arrays) en lugar de argumentos del tipo T. Si la función de agregación acepta varios argumentos, estos deben ser arrays de la misma longitud. Al procesar arrays, la función de agregación funciona como la función de agregación original sobre todos los elementos del array.
Ejemplo 1: sumArray(arr) - Suma todos los elementos de todos los arrays arr. En este ejemplo, podría haberse escrito de forma más simple: sum(arraySum(arr)).
Ejemplo 2: uniqArray(arr) – Cuenta el número de elementos únicos en todos los arrays arr. Esto podría hacerse de una forma más sencilla: uniq(arrayJoin(arr)), pero no siempre es posible añadir arrayJoin a una consulta.
-If y -Array pueden combinarse. Sin embargo, Array debe ir primero y luego If. Ejemplos: uniqArrayIf(arr, cond), quantilesTimingArrayIf(level1, level2)(arr, cond). Debido a este orden, el argumento cond no será un array.
-Map
-SimpleState
x— Parámetros de la función de agregación.
SimpleAggregateFunction(...).
Ejemplo
Query
Response
-State
uniq, se trata de la tabla hash para calcular el número de valores únicos). Se trata de un AggregateFunction(...) que puede usarse para su posterior procesamiento o almacenarse en una tabla para completar la agregación más adelante.
Tenga en cuenta que -MapState no es invariante para los mismos datos, ya que el orden de los datos en el estado intermedio puede cambiar, aunque esto no afecta a la ingestión de esos datos.
- el motor de tabla AggregatingMergeTree.
- la función finalizeAggregation.
- la función runningAccumulate.
- el combinador -Merge.
- el combinador -MergeState.
-Merge
-MergeState
-ForEach
sumForEach para los arrays [1, 2], [3, 4, 5]and[6, 7] devuelve el resultado [10, 13, 5] después de sumar los elementos correspondientes de los arrays.
-Tuple
-Tuple puede añadirse a cualquier función de agregación. La función combinada recibe un argumento de tipo Tuple por cada argumento de la función de agregación subyacente; todas las tuplas deben tener el mismo número de elementos. La agregación se aplica de forma independiente en cada posición de los elementos: recibe el elemento correspondiente de cada Tuple y devuelve una Tuple con los resultados.
Si la primera Tuple de entrada tiene nombres de elementos explícitos, se conservan en el resultado.
Las funciones de agregación que manejan por sí mismas los valores NULL (anyRespectNulls, anyLastRespectNulls, el modificador RESPECT NULLS) no admiten el tipo Nullable(Tuple(...)) como argumento; use elementos Nullable en su lugar.
Sintaxis
tuple1[, tuple2, ...]— Columnas de tipoTuple, una por cada argumento de la función de agregación subyacente, todas con el mismo número de elementos. Cada elemento debe ser de un tipo admitido por la función de agregación subyacente en esa posición del argumento.
- Un
Tupleque contiene el resultado de aplicar la función de agregación a cada elemento por separado.
Tuple(aggFunction(element1), aggFunction(element2), ...).
Ejemplo
Consulta:
GROUP BY:
Tuple aporta uno de los argumentos de la función subyacente, y los elementos se emparejan según su posición:
a1 y b1 están anticorrelacionados, mientras que a2 y b2 son proporcionales, por lo que el resultado es (-1, 1).
-Tuple se puede combinar con otros combinadores, como -If. Por ejemplo: sumTupleIf(tuple_column, cond).
-Distinct
sum(DISTINCT x) (o sumDistinct(x)), groupArray(DISTINCT x) (o groupArrayDistinct(x)), corrStable(DISTINCT x, y) (o corrStableDistinct(x, y)) y así sucesivamente.
-OrDefault
-OrDefault puede usarse con otros combinadores.
Sintaxis
x— Parámetros de la función de agregación.
Query
Response
-OrDefault también puede usarse con otros combinadores. Resulta útil cuando la función de agregación no admite una entrada vacía.
Query
Response
-OrNull
-OrNull puede usarse con otros combinadores.
Sintaxis
x— Parámetros de la función de agregación.
- El resultado de la función de agregación, convertido al tipo de dato
Nullable. NULL, si no hay nada que agregar.
Nullable(tipo de retorno de la función de agregación).
Ejemplo
Añada -orNull al final de la función de agregación.
Query
Response
-OrNull también puede usarse con otros combinadores. Resulta útil cuando la función de agregación no admite entradas vacías.
Query
Response
-Resample
start— Valor inicial de todo el intervalo requerido para los valores deresampling_key.stop— Valor final de todo el intervalo requerido para los valores deresampling_key. El intervalo completo no incluye el valorstop:[start, stop).step— Paso para dividir el intervalo completo en subintervalos.aggFunctionse ejecuta en cada uno de esos subintervalos de forma independiente.resampling_key— Columna cuyos valores se utilizan para dividir los datos en intervalos.aggFunction_params— Parámetros deaggFunction.
- Array de resultados de
aggFunctionpara cada subintervalo.
people con los siguientes datos:
[30,60) y [60,75). Como usamos una representación entera para la edad, obtenemos edades en los intervalos [30, 59] y [60,74].
Para agrupar los nombres en un Array, usamos la función de agregación groupArray. Acepta un argumento. En nuestro caso, es la columna name. La función groupArrayResample debe usar la columna age para agrupar los nombres por edad. Para definir los intervalos necesarios, pasamos los argumentos 30, 75, 30 a la función groupArrayResample.
John queda fuera de la muestra porque es demasiado joven. Las demás personas se distribuyen según los intervalos de edad especificados.
Ahora contemos el número total de personas y su salario promedio en los intervalos de edad especificados.
-ArgMin
sumArgMin(column, expr), countArgMin(expr), avgArgMin(x, expr) y así sucesivamente.