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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    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 946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 946
    Billets dans le blog
    66
    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 confirmé
    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 : 63
    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
    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 Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    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 confirmé
    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 : 63
    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
    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 Expert
    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
    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 ????

+ 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