CREATE AGGREGATE

Nom

CREATE AGGREGATE — définit une nouvelle fonction agrégat
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 ]
    )
  

Entrées

name

nom de la fonction agrégat a créer.

data_type

le type de donnée fondamental sur lequel cette fonction agrégat opère.

sfunc1

la fonction transition appelée pour chaque champ non-NULL depuis la colonne source. Elle prend une variable de type sfunc1_return_type comme premier argument et le champ comme second argument.

sfunc1_return_type

type retourné de la première fonction transition.

sfunc2

la fonction transition appelée pour chaque champ non-NULL depuis la colonne source. Elle prend une variable de type sfunc2_return_type comme seul argument et retourne une variable du même type.

sfunc2_return_type

type retourné de la seconde fonction transition.

ffunc

fonction finale appelée après avoir traversé tous les champs entrée. Cette fonction doit prendre deux arguments de type sfunc1_return_type et sfunc2_return_type.

initial_condition1

valeur initiale pour le premier argument de fonction transition.

initial_condition2

valeur initiale pour le second argument de fonction transition.

Sorties

CREATE

message de retour si la commande s'est exécutée correctement.

Description

CREATE AGGREGATE permet à l'utilisateur ou au programmeur d'étendre les fonctionnalités de Postgres en définissant de nouvelles fonctions agrégats. Certaines fonctions agrégats de type base comme min(int4) et avg(float8) sont déja fournies dans la distribution de base. Si quelqu'un défini de nouveaux types ou a besoin d'une fonction agrégat pas encore fournie, CREATE AGGREGATE peut être utilisé pour fournir ces fonctionnalités.

Une fonction agrégat peut avoir besoin de trois fonctions, deux fonctions transition, sfunc1 et sfunc2:
sfunc1( internal-state1, next-data_item ) ---> next-internal-state1 sfunc2( internal-state2 ) ---> next-internal-state2
   
et une fonction calcul finale, ffunc:
ffunc(internal-state1, internal-state2) ---> aggregate-value
   

Postgres crée deux variables temporaires (voir temp1 et temp2) pour maintenir les résultats intermédiaires utilisés par les fonctions transition.

Ces fonctions transition nécessitent d'avoir les propriétés suivantes :

Une fonction aggrégat peut aussi nécessiter une ou deux conditions initiales, une pour chaque fonction transition. Elles sont spécifiées et stockées dans la base comme champs de type text.

Notes

Utilisez DROP AGGREGATE pour supprimer les fonctions agrégats.

Il est possible de spécifier des fonctions agrégat pour avoir différentes combinaisons d'états et de fonctions finales. Par exemple, l'agrégat count requiert SFUNC2 (une fonction d'incrémentation) mais pas SFUNC1 ou FINALFUNC, de même l'agrégat sum requiert SFUNC1 (une fonction addition) mais pas SFUNC2 ou FINALFUNC et l'agrégat avg requiert les deux fonctions ci-dessus aussi bien que FINALFUNC (une fonction division) pour produire sa réponse. Dans certains cas, au moins une fonction doit être définie, et certaines SFUNC2 doivent avoir un INITCOND2 correspondant.

Utilisation

Voir le chapitre sur les agrégats dans le guide du programmeur PostgreSQL, pour des exemples complets sur les fonctions agrégats.

Compatibilité

SQL92

CREATE AGGREGATE est une extension du langage Postgres. Il n'existe pas de CREATE AGGREGATE en SQL92.