Aqui segue uma descrição das diferentes funções que você precisa definir quando você quer criar uma função UDF agregada.
Note que a seguinte função NÃO é necessária ou usada pelo MySQL 4.1.1. Você ainda pode manter a definição de sua função se você quiser o seu código funcinonando com o MySQL 4.0 e MySQL 4.1.1
char *xxx_reset(UDF_INIT *initid, UDF_ARGS *args,
                char *is_null, char *error);
Esta função é chamada quando o MySQL encontra a primiera linha em um novo grupo. Na função você deve zerar quaisquer variáveis sumárias internas e então definir o argumento dados como o primeiro argumento no grupo.
          Em muitos casos isto é implementado internamente zerando
          todas as variáveis (por exemplo, chamando
          xxx_clear() e então chamando
          xxx_add().
        
A seguinte função só é exigida pelo MySQL 4.1.1 e acima:
char *xxx_clear(UDF_INIT *initid, char *is_null, char *error);
          Esta função é chamada quando o MySQL precisa de zerar o
          resumo dos resultados. Ele será chamado no começo de cada
          grupo novo mas também pode ser chamado para zerar os valores
          para uma consulta que não tiver registros coincidentes.
          is_null será definido para apontar para
          CHAR(0) antes de chamar
          xxx_clear().
        
          Você pode usar o ponteiro error para
          armazenar um byte se alguma coisa der errado.
        
char *xxx_add(UDF_INIT *initid, UDF_ARGS *args,
              char *is_null, char *error);
Esta função é chamada por todas as linhas que pertencem ao mesmo grupo, exceto na primeira linha. Nesta você deve adicionar o valor em UDF_ARGS a sua variavel sumária interna.
          A função xxx() deve ser declarada da
          mesma forma que você define uam função UDF simples. See
          Secção 14.2.2.1, “Sequência de Chamadas UDF para Funções Simples”.
        
          A função é chamada quando todas as linhas no grupo tem sido
          processada. Normamente você nunca deve acessar a variável
          args aqui mas retornar o seu valor baseado
          em sua variável sumária interna.
        
          Todos os argumentos processados em
          xxx_reset() e xxx_add()
          devem ser feito de forma idêntica as UDF's normais. See
          Secção 14.2.2.3, “Processando Argumentos”.
        
          O tratamento do valor de retorno em xxx()
          deve ser feito de forma idêntica a uma UDF normal. See
          Secção 14.2.2.4, “Valor de Retorno e Tartamento de Erros”.
        
          O argumento ponteiro para is_null e
          error é o mesmo para todas as chamadas
          xxx_reset(),
          xxx_clear(), xxx_add() e
          xxx(). Você pode utilizar isto para
          lembrar que você obteve um erro ou se a função
          xxx() deve retornar
          NULL. Note que você não deve armazenar
          uma string em *error! Ela é um parâmetro
          de apenas 1 byte!
        
          is_null é zerado para cada grupo (antes de
          chamar xxx_clear()).
          error nunca é zerado.
        
          Se isnull ou error são
          definidos depois de xxx() então o MySQL
          retornará NULL como o rsultado para a
          função do grupo.
        
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

