IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Créer sa propre fonction d'agrégat


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre actif
    Homme Profil pro
    Première S
    Inscrit en
    Juillet 2010
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Première S

    Informations forums :
    Inscription : Juillet 2010
    Messages : 266
    Points : 281
    Points
    281
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    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.

Discussions similaires

  1. Créer une fonction d'agrégation comme count
    Par vincikito dans le forum Développement
    Réponses: 2
    Dernier message: 28/11/2011, 16h02
  2. créer sa propre fonction
    Par cemyr dans le forum Macro
    Réponses: 14
    Dernier message: 26/01/2011, 15h11
  3. Comment créer mes propres fonctions
    Par matnes dans le forum MATLAB
    Réponses: 1
    Dernier message: 30/09/2007, 10h52
  4. [MySQL] créer ses propres fonctions
    Par essono dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/11/2006, 16h09
  5. méssage d'erreur fonction d'agrégat
    Par developpeur_mehdi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/03/2004, 13h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo