Bonjour,
je voudrai obtenir le résultat réel d'une division sur 4 decimale avec un round(......,4)les deux valeurs à diviser sont chacune une sub_query de type select renvoyant un entier naturel j'ai pas compris comment faire J'ai des erreurs de type selon ce que j'essaye comme :
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
ou des mensonges comme round function doesn't exists.... etc....
j'ai besoin de faire très exactement ça :
create vieuw as select ...................................., (round((select .resultINTEGER......)::float/(select ......resultINTEGER....)::float),4decimales) ..................................from ZEtable ;ou équivalant... mais impossible de trouver la bonne méthode....
C'est pour envisager une vue.... avec pleins de choses + le prix_au_km
les deux types de select sont un calcul de km et de prix de materiel pour estimer un prix_au_km
km est un integer
prix est un integer
je reprends ma fidele base de test pour jouer avec la meme structure :
mais j'arrive pas à formater cette partie là de la requette j'obtiens 2 résultats aussi inutiles l'un que l'autre....à savoir zéro, ou encore des erreur diverses et variées ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part round((select syntax errorforcer le typage ne sert à rien ça génère aussi un rejet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 perso=# select round(sum(prix_achat)/sum(km),4) from stockvelo ; round -------- 0.0000 (1 row) perso=#
ou alors au mieux le formatage est purement et simplement ignoré
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 perso=# select round(sum(prix_achat)::float/sum(km)::float,4) from stockvelo ; ERROR: function round(double precision, integer) does not exist LINE 1: select round(sum(prix_achat)::float/sum(km)::float,4) from s... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. perso=#
le meilleur résultat de google : le seul cas trouvé avec le même besoin ne fonctionne pas quand je mets mes noms de tables/champs:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 perso=# select ((select sum(prix_achat) from stockvelo)/(select sum(km) from stockvelo))::float ; float8 -------- 0 (1 row) perso=#
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 perso=# select (select sum(prix_achat::float) from stockvelo)/(select sum(km::float) from stockvelo) ; ?column? -------------------- 0.0217211004976263 (1 row) perso=# select round((select sum(prix_achat::float) from stockvelo)/(select sum(km::float) from stockvelo),4) ; ERROR: function round(double precision, integer) does not exist LINE 1: select round((select sum(prix_achat::float) from stockvelo)/... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. perso=#perso=# select cast(DATA1.sum1 as float)/cast(DATA2.sum2 as float) from (select round(sum(prix_achat),4) as sum1 from stockvelo) DATA1 , (select round(sum(km),4) as sum2 from stockvelo) DATA2 ; ?column? -------------------- 0.0217211004976263 (1 row) perso=# perso=# select round(cast(DATA1.sum1 as float),4)/round(cast(DATA2.sum2 as float),4) from (select sum(prix_achat) as sum1 from stockvelo) DATA1 , (select sum(km) as sum2 from stockvelo) DATA2 ; ERROR: function round(double precision, integer) does not exist LINE 1: select round(cast(DATA1.sum1 as float),4)/round(cast(DATA2.s... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. perso=#ehgefhgtvlbvealmauuo
Quelle est la bonne façon d'obtenir un résultat réel sur une division de deux entiers resultat chacun d'un sub-query de type select ?
Merci
PS: inutile de me dire de modifier les colonnes en décimale, car hors de ma base de test, c'est rigoureusement impossible !!!! les données réellement utilisées viennet d'un automate electromécanique qui ne sait sortir que l'int 16bitset rien d'autre pour l'un des select et pour l'autre c'est une base externe à laquelle on n'aura accès qu'en lecture de toute façon chez chacun des équipementiers concernés, et lanorme entre eux c'est INTEGER !!!!
PS¹: je viens de voir l'heure.... ça fait donc depuis ce matin que je galère sur ce truc là.... je part dejeuner urgement
PS²: c'est à s'arracher les testi#!*%$@ avec les dents ce truc ....heureusement que je manque de souplesse !
Partager