|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : avril 2004 Messages : 15 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 302 ![]() |
à quoi correspondent tes champs a et b : ce sont bien des champs de type entiers ??
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : avril 2004 Messages : 15 ![]() |
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. |
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Inscription : mai 2005 Messages : 147 ![]() |
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 |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : avril 2004 Messages : 15 ![]() |
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à ? |
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 302 ![]() |
ç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 : |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : avril 2004 Messages : 15 ![]() |
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 |
|
|
00
|
|
|
#8 |
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 302 ![]() |
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 |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : avril 2004 Messages : 15 ![]() |
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 Comment je l'ai écrit au hasard est-ce que "float" est le bon terme pour indiquer le type double précision? |
|
|
00
|
|
|
#10 |
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 302 ![]() |
Avec un "Integer" le résultat de 3/2 te donne 1 et non 1,5.
C'est pourquoi il faut utiliser des float |
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : avril 2004 Messages : 15 ![]() |
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.
|
|
|
00
|
|
|
#12 |
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 302 ![]() |
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 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com