IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Select if ( select sum ()) arrondis?


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut 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 : 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:

    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`;
    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.

  2. #2
    Membre éprouvé
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IFNULL(SUM(chmp1 * chmp2), 0) FROM test;

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut
    précis, bref, magique, ... Merci. Je vais voir si je peux adapter ca a ma requete normalement ca devrai marcher! Merci Bcp.

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut
    Ca marche parfaitement. Gros merci GK!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. select in (select in (select in etc.))
    Par Christophe P. dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/01/2015, 11h34
  2. select + count() ou SUM + jointure
    Par gilles974 dans le forum Requêtes
    Réponses: 6
    Dernier message: 31/10/2008, 13h58
  3. Réponses: 6
    Dernier message: 20/11/2007, 11h14
  4. Forms 9i : CURSOR "SELECT 1, (SELECT..&q
    Par McM dans le forum Oracle
    Réponses: 9
    Dernier message: 05/11/2005, 14h02
  5. flexgrid:selection cellule=selection ligne
    Par Terminator dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/10/2005, 21h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo