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

PostgreSQL Discussion :

[calcul] pb avec la syntaxe d'une expression calulée


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Points : 10
    Points
    10
    Par défaut [calcul] pb avec la syntaxe d'une expression calulée
    Voilà, je reviens vous voir car lorsque j'ecris :
    CREATE VIEW nom_vue(col_vue) AS SELECT ((a-b)/b*100) FROM ma_table

    pgsql ne me calcule pas correctement ((a-b)/b*100). Pourtant cette expression est correcte mathématiquement puisque je l'ai testée sous excel.

    Cela fonctionne si je lui fait calculer successivement a-b=x, puis x/b=y et y*100.

    Alors peut-être que pgsql nécessite une syntaxe particulère, en tout cas je ne trouve pas la solution. Si vous pouviez m'aider...

    merci

  2. #2
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Points : 331
    Points
    331
    Par défaut
    à quoi correspondent tes champs a et b : ce sont bien des champs de type entiers ??
    L'héroïsme, c'est encore la meilleure façon de devenir célèbre quand on n'a pas de talent
    Pierre Desproges

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    oui (int) tous les deux.

    peut-être que pgsql n'est pas capable de faire plusieurs calculs en même temps, ou peut-être que de mélanger les "-" et les "/" ça le derange.
    En tout cas ça ne marche pas et je ne trouve aucune doc sur le Net.

  4. #4
    Membre habitué Avatar de champijulie
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 131
    Points
    131
    Par défaut
    Bonjour,

    j'aurais voulu savoir si PostgreSQL te renvoit le même resultat que si tu faisait ton calcul sans parenthèse. Je m'explique:
    est- ce que le résultat de ((a-b)/b*100) sous PostgreSQL (qui te donne un mauvais résultat) est égal au résultat de a-b/b*100 avec Excel?

    Essaie ça. Si c'est le cas, tu as un gros problème de parenthèse.

    @+
    champijulie

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    non les résulats diffèrent.
    Postgresql me sort des résultats complètement aberrant genre de "100 ou -100 ou 0 ou 99 ou -99" : cela ne correspond à rien.


    je pense à un truc là. Au départ mes valeurs sont de type integer et au résultat elles sont à double precision, cela vient peut-être de là ?

  6. #6
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Points : 331
    Points
    331
    Par défaut
    ça ne vient pas des opérateurs car j'ai fait des tests chez moi et tout passe nikel.
    Par contre je ne comprends pas pourquoi tu dis que tes résultats sont à double précision car tu ne ranges pas ton résultat dans un champ en tout cas pas dans cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ((a-b)/b*100) FROM ma_table
    L'héroïsme, c'est encore la meilleure façon de devenir célèbre quand on n'a pas de talent
    Pierre Desproges

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    oui non laisse tomber je pensais à haute "voix", ça na pas de sens.

    Alors toi elle marche tu l'as faite avec CREATE VIEW ou CREATE TABLE ou autre... Pourquoi ?

    Moi ça me met des 0 partout... Je ne comprends pas

  8. #8
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Points : 331
    Points
    331
    Par défaut
    j'ai juste testé avec un SELECT.
    Si tu n'asa que des 0, ton (a-b) ne serait-il pas toujours inférieur à ton b par hasard ?? Si c'est la cas c'est normal tu devrais caster : voir dernier message de ce post : http://www.developpez.net/forums/viewtopic.php?t=364784 (vu que tu avais déjà posté la question)
    L'héroïsme, c'est encore la meilleure façon de devenir célèbre quand on n'a pas de talent
    Pierre Desproges

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Ben alors là je comprends plus très bien, pourquoi je "re typerai" des champs qui sont tous les deux des integer ? et quel type leur affecter? et comment on fait ?

    je viens de taper ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ((pop_99 - pop_90)::float/pop_90*100) FROM communes
    et les résultats sont bcp plus probants. J'ai pas vérifié s'ils sont justent, mais ils sont vraissemblables.
    Comment je l'ai écrit au hasard est-ce que "float" est le bon terme pour indiquer le type double précision?

  10. #10
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Points : 331
    Points
    331
    Par défaut
    Avec un "Integer" le résultat de 3/2 te donne 1 et non 1,5.
    C'est pourquoi il faut utiliser des float
    L'héroïsme, c'est encore la meilleure façon de devenir célèbre quand on n'a pas de talent
    Pierre Desproges

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    alors là vraiment encore un gros MERCI parceque sans toi ni les autres, je ne pense pas que j'aurais trouvé la solution aussi "rapidement" voire peut-être jamais.

  12. #12
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Points : 331
    Points
    331
    Par défaut
    Ne te sous-estimes pas : en lisant quelques tutoriels tu aurais surement trouvé. D'ailleurs c'est ce que je te conseille pour l'avenir car tu metteras certainement plus de temps à trouver mais tu t'en souviendras plus souvent. Plus on galère et plus on s'en souvient.

    Sinon penses au tag résolu en bas à gauche et bon courage pour la suite
    L'héroïsme, c'est encore la meilleure façon de devenir célèbre quand on n'a pas de talent
    Pierre Desproges

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/10/2012, 13h57
  2. [PHP 5.0] erreur de syntaxe avec une expression régulières
    Par SpeedOverflow dans le forum Langage
    Réponses: 2
    Dernier message: 20/01/2012, 12h48
  3. compilateur avec message lancement d'une expression inapproprié
    Par stephcast dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 03/04/2009, 22h24
  4. Réponses: 6
    Dernier message: 30/01/2008, 22h20
  5. Réponses: 7
    Dernier message: 05/07/2005, 16h50

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