Todo agregado de MobilityDB, como tCount, tSum o extent, se llama con el mismo nombre en todos los motores, con una excepción. Once agregados comparten su nombre con una función: tMin, tMax, merge, appendInstant, appendSequence, sameAlignment, tAnd, tOr, setUnion, spanUnion y spansetUnion. PostgreSQL permite que un agregado y una función compartan un nombre, y MobilityDB llama a estos agregados por él. DuckDB, Apache Spark y Apache Flink tienen una sola función por nombre, y los llaman con el nombre seguido de Agg: tMinAgg, mergeAgg, setUnionAgg, etc. (“Los nombres que poseen los motores”).
Un agregado calcula su resultado en hasta tres pasos, cada uno una función nombrada según el agregado y el paso. La función de transición <aggregate>Transition añade un valor a un estado en curso, la función de combinación <aggregate>Combine une dos estados calculados en paralelo, y la función final <aggregate>Final convierte el estado en el resultado. Los pasos de combinación y final son opcionales: extent no tiene función final, pues su estado es ya su resultado, y los agregados de adición no tienen función de combinación, pues añaden sus valores en orden temporal. Una consulta nunca llama a estas funciones; cada motor construye el agregado a partir de ellas.
La función de transición toma el estado y un valor, y tiene una versión por tipo de valor, como el agregado: tMinTransition toma un tint, un tbigint, un tfloat o un ttext. Las funciones de combinación y final toman solo estados, y un estado conoce el tipo de los valores que contiene, por lo que cada una es una sola función por agregado: tMinCombine combina los estados del mínimo temporal de todos los tipos de valor. En PostgreSQL, donde una función final declara el tipo que devuelve, la función final se declara una vez por tipo de valor con FINALFUNC_EXTRA, como tMinFinal(internal, tint) que devuelve un tint, y todas sus versiones ejecutan el mismo código. En Spark y Flink cada agregado es un solo objeto, que elige su función de transición según el tipo del valor.
La tabla siguiente lista todos los agregados y sus funciones; un guion (—) marca un paso que el agregado no tiene.
| Categoría | Transición | Combinación | Final |
|---|---|---|---|
| Conteo | tCountTransition | tCountCombine | tCountFinal |
| wCountTransition | wCountCombine | wCountFinal | |
| Suma | tSumTransition | tSumCombine | tSumFinal |
| wSumTransition | wSumCombine | wSumFinal | |
| Promedio | tAvgTransition | tAvgCombine | tAvgFinal |
| wAvgTransition | wAvgCombine | wAvgFinal | |
| Mínimo / máximo | tMinTransition | tMinCombine | tMinFinal |
| tMaxTransition | tMaxCombine | tMaxFinal | |
| wMinTransition | wMinCombine | wMinFinal | |
| wMaxTransition | wMaxCombine | wMaxFinal | |
| Booleano | tAndTransition | tAndCombine | tAndFinal |
| tOrTransition | tOrCombine | tOrFinal | |
| Centroide | tCentroidTransition | tCentroidCombine | tCentroidFinal |
| Nube de puntos | tnpointsTransition | tnpointsCombine | tnpointsFinal |
| tdensityTransition | tdensityCombine | tdensityFinal | |
| Caja delimitadora | extentTransition | extentCombine | — |
| Unión | setUnionTransition | setUnionCombine | setUnionFinal |
| spanUnionTransition | spanUnionCombine | spanUnionFinal | |
| spansetUnionTransition | spansetUnionCombine | spansetUnionFinal | |
| Fusión | mergeTransition | mergeCombine | mergeFinal |
| Anexado | appendInstantTransition | — | appendInstantFinal |
| appendSequenceTransition | — | appendSequenceFinal | |
| Ráster | rasterUnionTransition | rasterUnionCombine | rasterUnionFinal |
| sameAlignmentTransition | sameAlignmentCombine | sameAlignmentFinal | |
| summaryStatsAggTransition | summaryStatsAggCombine | summaryStatsAggFinal |