import { ConditionOperand, Query } from './schema.cjs';
import { NamespacedAndKeyedStream } from '../types.js';
/**
 * Process the groupBy clause in a D2QL query
 */
export declare function processGroupBy(pipeline: NamespacedAndKeyedStream, query: Query, mainTableAlias: string): NamespacedAndKeyedStream;
/**
 * Helper function to get an aggregate function based on the function name
 */
export declare function getAggregateFunction(functionName: string, columnRef: string | ConditionOperand, mainTableAlias: string): {
    preMap: (data: [string, Record<string, unknown>]) => number;
    reduce: (values: [number, number][]) => number;
    postMap?: ((result: number) => number) | undefined;
} | {
    pipe: (stream: import('@electric-sql/d2mini').IStreamBuilder<[string, Record<string, unknown>]>) => import('@electric-sql/d2mini').IStreamBuilder<import('@electric-sql/d2mini').KeyValue<string, number>>;
} | {
    preMap: (data: [string, Record<string, unknown>]) => {
        sum: number;
        count: number;
    };
    reduce: (values: [{
        sum: number;
        count: number;
    }, number][]) => {
        sum: number;
        count: number;
    };
    postMap?: ((result: {
        sum: number;
        count: number;
    }) => number) | undefined;
} | {
    preMap: (data: [string, Record<string, unknown>]) => number[];
    reduce: (values: [number[], number][]) => number[];
    postMap?: ((result: number[]) => number) | undefined;
} | {
    preMap: (data: [string, Record<string, unknown>]) => Map<number, number>;
    reduce: (values: [Map<number, number>, number][]) => Map<number, number>;
    postMap?: ((result: Map<number, number>) => number) | undefined;
};
