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

SQL Firebird Discussion :

comment contourner la "Division par zéro" ?


Sujet :

SQL Firebird

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut comment contourner la "Division par zéro" ?
    Salut

    j'ai dans une vue un champ calculé
    energie/volume as taux_consommation
    et comme j'ai le volume nul dans certains cas, ma requête s'arrête sur l'erreur "division par zéro" alors comment faire pour forcer la requête à finir son travail malgré cette erreur ?

    pour le moment j'ai changé la valeur "0" par "-1" pour ne pas avoir cette erreur ! j'ai en quelques sortes rapporté l'erreur mais c'est pas très propre, donc je me demande si c'est possible de le contourner au niveau du SGBD par l'utilisation d'une exception mais à condition que la requête s'achève ?!

    merci par avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 153
    Points : 41 334
    Points
    41 334
    Billets dans le blog
    63
    Par défaut
    bonjour,

    Utilises COALESCE pour null , IFF ou CASE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT energie/COALESCE(volume,-1) as taux_consommation FROM ... 
    SELECT energie/IFF(volume=0,-1,volume) as taux_consommation FROM ...
    je ne suis pas sur des syntaxes exactes , l'esprit est là

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Comme on ne peut pas estimer une consommation avec un volume égal à 0, je renverrai plutôt la valeur NULL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ENERGIE / NULLIF(VOLUME, 0) AS TAUX_CONSOMMATION FROM ...
    NULLIF substitue les 0 par des NULL. La division renvoie donc également NULL.

    @+ Claudius

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Salut !
    merci Cl@udius, ta solution est impeccable . merci à toi aussi serge même si j'ai pas testé ta proposition .

    autre chose tant qu'on y est; en travaillant avec les agrégats je me suis aperçus que la moyenne arithmétique prend aussi les valeurs "vides" ce qui fausse évidemment le résultat d'où ma question : comment faire pour ne prendre que les valeurs non nulles dans la moyenne ?

    merciiiiiiiiiiiiiiiiii

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re

    Sauf erreur de ma part la fonction AVG ne tient pas compte des valeurs nulles (NULL) dans son calcul.
    Donc a priori pas de problème.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    je confirme

    dans le cas contraire, cela serait une catastrophe statistique.


    Just-Soft, es tu sur de n'avoir pas fait un COALESCE quelque part qui aurait remplace des NULLs par un zero ????

  7. #7
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Exact, l'erreur me revient je travaille avec FastReport et javais oublié que j'ai positionné "HideZeros" à vrai

  8. #8
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Re,
    je fais encore appel à vous
    dans la même vue j'ai une opération de type : champ1/champ2 sachant que champ1 et 2 sont de type entier donc si le résultat est < 0 le système me rend 0 alors que j'ai besoin du résultat même si si de l'ordre de 10-4 ! comment faire dans ce cas ?

    merci encore.

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Fais un CAST avec la précision que tu souhaites.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT F1 / CAST(F2 AS NUMERIC(15, 4)) AS DIVISION 
    FROM ...
    @+

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    re bonjour


    la division de 2 valeurs entieres donne une valeur entiere.

    Il convient donc de caster les 2 entier, ou meme seulement un des entier en reel


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cast (:valeur1 as FLOAT) / :valeur2
    alors le resultat sera un reel


    mince, battu par claudius

  11. #11
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    merci les champions

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment éviter la division par zéro?
    Par hazem2410 dans le forum C#
    Réponses: 3
    Dernier message: 15/11/2010, 17h55
  2. [Tableaux] Pb de division par zéro...
    Par blueice dans le forum Langage
    Réponses: 8
    Dernier message: 16/12/2005, 15h52
  3. [CR][VS.NET]Division par zéro
    Par San Soussy dans le forum SDK
    Réponses: 2
    Dernier message: 31/08/2005, 14h40
  4. [CR8.5] Problème de division par zéro sur formule
    Par franck.cvitrans dans le forum Formules
    Réponses: 3
    Dernier message: 10/06/2004, 13h41
  5. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14

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