Select if ( select sum ()) arrondis?
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:
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:
Code:
1 2
| select IF((SELECT SUM( `test`.`chmp1` * `test`.`chmp2` )
FROM `test`)<=>NULL,0,(SELECT SUM(`test`.`chmp1` * `test`.`chmp2`) FROM `test`)) as `resultat`; |
Normalement le résultat devrait être 7.50. Pourtant on obtient 8 !!
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.