Précédent   Forum du club des développeurs et IT Pro > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/07/2012, 11h53   #1
Dominique49
Membre confirmé
 
Homme Dominique
Première S
Inscription : juillet 2010
Messages : 267
Détails du profil
Informations personnelles :
Nom : Homme Dominique
Âge : 16
Localisation : France

Informations professionnelles :
Activité : Première S

Informations forums :
Inscription : juillet 2010
Messages : 267
Points : 241
Points : 241
Par défaut Créer sa propre fonction d'agrégat

Bonjour,
J'aurais besoin de créer ma propre fonction d'agrégat. Cela fait plus d'une heure que je tente de digéré la documentation ... mais il y a encore quelque chose que je ne comprend pas. Voilà la procédure à suivre pour créer sa fonction d'agrégat :

Code :
1
2
3
4
CREATE AGGREGATE nom ( type_donnée_entrée [ , ... ] ) (
    SFUNC = sfonc,
    STYPE = type_donnée_état
)
Ok, ça ce n'est pas un problème ... du moment que la fonction est faite. Voici donc un exemple de création de fonction :

Code :
1
2
3
4
5
CREATE FUNCTION ADD(integer, integer) RETURNS integer
    AS 'select $1 + $2;'
    LANGUAGE SQL
    IMMUTABLE
    RETURNS NULL ON NULL INPUT;
Ok, jusque là je suis ... mais cette fonction ne s'applique que sur une ligne ... je sais que je ne suis pas clair, mais ce que je veux dire c'est que les fonctions d'agrégat s'exerce sur plusieurs "lignes", et que cette exemple de fonction ne s'exerce que sur deux paramètres ...

Voilà, j'espère que vous avez compris mon problème ... pour info, je souhaiterait faire une fonction ressemblant fort à MIN mais pouvant s'appliquer sur un BOOLEAN, en considérant que l'ordre croissant est : NULL, FALSE, TRUE ...

Merci d'avance.
Dominique49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2012, 14h57   #2
estofilo
Modérateur
 
Inscription : octobre 2008
Messages : 1 702
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 702
Points : 2 347
Points : 2 347
La fonction d'aggrégat ne prend pas toutes les valeurs d'un coup en paramètre, elle est appelée répétitivement avec la dernière valeur calculée en 1er param et la valeur suivante de la liste en 2eme param.
Lors du 1er appel de la fonction, il n'y a pas de dernière valeur calculée c'est pourquoi l'aggrégat permet de spécifier la valeur de départ dans 'initcond'. Pour une addition par exemple ça va être zéro.

Pour ce que tu veux faire ça devrait être un peu similaire à l'aggrégat prédéfini bit_and à part pour la gestion des valeurs à NULL.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h13.


 
 
 
 
Partenaires

Hébergement Web