CREATE AGGREGATE

Name

CREATE AGGREGATE  --  Define una nueva función de agregado

Synopsis

CREATE AGGREGATE name [ AS ] ( BASETYPE = data_type
    [ , SFUNC1 = sfunc1, STYPE1 = sfunc1_return_type ]
    [ , SFUNC2 = sfunc2, STYPE2 = sfunc2_return_type ]
    [ , FINALFUNC = ffunc ]
    [ , INITCOND1 = initial_condition1 ]
    [ , INITCOND2 = initial_condition2 ] )
  

Entradas

name

El nombre de la función de agregado a crear.

data_type

El tipo de dato fundamental sobre el que opera esta función de agregado.

sfunc1

La función de estado de trancisión que ha de llamarse para cada campo no nulo desde la columna fuente. Toma una variable del tipo sfunc1_return_type como primer argumento y el campo como segundo argumento.

sfunc1_return_type

El tipo devuelto de la primera función de trancisión.

sfunc2

La función de estado de trancisión que ha de llamarse para cada campo no nulo de la columna origen. Toma una variable de tipo sfunc2_return_type como argumento unico y devuelve una variable del mismo tipo.

sfunc2_return_type

EL tipo devuelto por la segunda función de trancisión.

ffunc

La función final llamada tras convertir todos los campos de entrada. Esta función debe recibir dos argumentos de los tipos sfunc1_return_type y sfunc2_return_type.

initial_condition1

El valor inicial para el argumento de la primera función de trancisión.

initial_condition2

El valor inicial del argumento de la segunda función de trancisión.

Outputs

CREATE

Mensaje devuelto si el comando se completa satifactoriamente.

Description

CREATE AGGREGATE permite a un usuario o programador extender la funcionalidad de Postgres definiendo nuevas funciones de agregado. Algunas funciones de agregado para tipos base como min(int4) y avg(float8) están ya disponibles en la distribución base. Si se definen nuevos tipos o se necesita una función de agregado que no se proporciona, puede usarse el comando CREATE AGGREGATE para proporcionar las características deseadas.

Una función de agregados puede requerir hasta tres funciones, dos funciones de trancisión de estado, sfunc1 y sfunc2:

sfunc1( internal-state1, next-data_item ) ---> next-internal-state1 sfunc2( internal-state2 ) ---> next-internal-state2
   
y una función final de cálculo, ffunc:
ffunc(internal-state1, internal-state2) ---> aggregate-value
   

Postgres crea hasta dos variables temporales (referidas aquí como temp1 y temp2) para mantener resultados intermadios usados como argumentos por las funciones de trancisión.

Estas funciones de trancisión han de tener las siguinetes propiedades:

Una función de agregado puede requerir solo una o dos condiciones iniciales, una para cada función de trancisión. Estas se especifican y almacenan en la base de datos como campos de tipo text.

Notes

Use DROP AGGREGATE para desechar funciones de agregado.

Es posible especificar funciones de agregado que tengan diversas convinaciones de funciones de estado y funciones finales. Por ejemplo, la función de agregado count requiere SFUNC2 (una función de incremento) pero no SFUNC1 o FINALFUNC, mientras que la función de agregado sum requiere SFUNC1 (una función de adicción) pero no SFUNC2 ni FINALFUNC y la función de agregado avg requiere tanto las dos funciones de estado como una FINALFUNC (una función de división) para producir su resultado. En cualquier caso, al menos una de las funciones de estado debe ser definida, y cualquier SFUNC2 debe tener el correspondiente INITCOND2.

Usage

Vease el capítulo de las funciones de agregado en la Guia del Programador (PostgreSQL Programmer's Guide) para ejemplos de uso más completos.

Compatibilidad

SQL92

CREATE AGGREGATE es una extensión del lenguaje de Postgres No existe la orden CREATE AGGREGATE en SQL92.