Bonjour à tous,
Je cherche depuis ce matin la réponse à un probleme qui peut paraitre très simple mais dont personne ne parle nul part.
Voici ma table:
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 -- -- Structure de la table `test` -- CREATE TABLE `test` ( `chmp1` int(11) NOT NULL, `chmp2` decimal(5,2) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; -- -- Contenu de la table `test` -- INSERT INTO `test` (`chmp1`, `chmp2`) VALUES (2, 1.50), (3, 1.50);
J'execute la requete suivante:
Normalement le résultat devrait être 7.50. Pourtant on obtient 8 !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select IF((SELECT SUM( `test`.`chmp1` * `test`.`chmp2` ) FROM `test`)<=>NULL,0,(SELECT SUM(`test`.`chmp1` * `test`.`chmp2`) FROM `test`)) as `resultat`;
On obtient 7.5 si on effectue la SUM sans le SELECT IF.
J'en déduis que le SELECT IF effectue un arrondis.
Comment l'en empecher?
PS: petite précision sur la syntaxe des arguments du select if:
SELECT IF(_comparaison, _résultat1 si _comparaison vrai, _résultat2 si _comparaison fausse)
Remarque: Si on remplace _résultat2 par la requête simple: (select 1+1.5) on remarque que le résultat sera 2.5.
Donc l'arrondis ne se fait que dans le cas du binome
SELECT IF(SELECT SUM());
Pourquoi? Comment l'éviter?
l'opérateur <=> NULL retourne Vrai si le résultat est null.
Merci pour toute piste ou conseil.
Partager