Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/06/2005, 12h45   #1
Invité de passage
 
Inscription : avril 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 15
Points : 4
Points : 4
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
gloogloo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 14h21   #2
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
à quoi correspondent tes champs a et b : ce sont bien des champs de type entiers ??
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 14h29   #3
Invité de passage
 
Inscription : avril 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 15
Points : 4
Points : 4
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.
gloogloo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 15h06   #4
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
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
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 15h11   #5
Invité de passage
 
Inscription : avril 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 15
Points : 4
Points : 4
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à ?
gloogloo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 15h25   #6
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
ç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 :
SELECT ((a-b)/b*100) FROM ma_table
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 15h35   #7
Invité de passage
 
Inscription : avril 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 15
Points : 4
Points : 4
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
gloogloo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 16h00   #8
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
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)
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 16h34   #9
Invité de passage
 
Inscription : avril 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 15
Points : 4
Points : 4
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 :
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?
gloogloo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 16h53   #10
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
Avec un "Integer" le résultat de 3/2 te donne 1 et non 1,5.
C'est pourquoi il faut utiliser des float
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 17h00   #11
Invité de passage
 
Inscription : avril 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 15
Points : 4
Points : 4
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.
gloogloo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 17h14   #12
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
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
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h36.


 
 
 
 
Partenaires

Hébergement Web