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

Langage SQL Discussion :

Mauvais résultat avec SUM et GROUP BY


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut Mauvais résultat avec SUM et GROUP BY
    Bonjour a tous,


    Je précise que j'ai d'abord cherché sur le forum mais il semblerait que ma question soit plus simple que celles posées et pourtant je n'y arrive pas.

    Plus c'est simple, plus je bug :-/

    Donc voici mon problème s'il vous plait .

    Imaginons des tables simples


    Table CLIENTS C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    idCLIENT   NOM           TOT
    1              JEAN           100000
    2              PAUL            50000
    3              JACQUES      25000
    Table GESTION G qui permet de mettre plusieurs utilisateurs par clients
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    idGEST  idCLIENT
    1               1
    2               3
    3               1
    4               2

    Le but final étant de calculer la somme totale AVEC comme OBLIGATION D'EVITER le idGEST=2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $phrase = " FROM `CLIENTS` C, `GESTION` G where G.idGEST<>'2' and C.idCLIENT=G.idCLIENT GROUP by G.idCLIENT";
    $result= mysql_query("SELECT D.idCLIENT $phrase");
    $nb=mysql_num_rows($result);
     
    $result_mt= mysql_query("SELECT SUM(totfin) AS cout $phrase"); 
    $total_mt=ceil($total_mt/1000);
     
    echo  $nb.' | '.$total_mt;

    Resultat attendu : 3 | 175K€

    Resultat obtenu : 3 | 275K€ ??? pourquoi le GROUP by ne fonctionne pas dans ce cas ?

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bonsoir

    Si vous voulez calculer la somme, il faut le faire au niveau de l'agrégat
    Profitez en pour normaliser les jointures, l'opérateur JOIN existe depuis 20 ans, il n'est pas trop tard pour l'utiliser

    Voici une requête normalisée et qui fera le calcul souhaité


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     SELECT C.idCLIENT
          , sum(C.TOTAL) 
     FROM   CLIENTS     as C 
     INNER JOIN GESTION as G 
        on G.idCLIENT=C.idCLIENT 
     where G.idGEST<>'2' 
     GROUP by G.idCLIENT

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Merci escartefigue de ton aide,

    Cependant, j'ai le même résultat avec ta jonction qu'avec mon ancienne syntaxe, soit 275 et non 175.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Pour savoir pourquoi tu as le mauvais résultat, commence par regarder le résultat de cette requete, et fais toi même la somme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT G.idGEST, C.idCLIENT
          , C.TOTAL
     FROM   CLIENTS     as C 
     INNER JOIN GESTION as G 
        on G.idCLIENT=C.idCLIENT 
     where G.idGEST<>'2'
    puis il faudra faire une requête sans jointure en utilisant soit un in ou un exists ou un not in , not exists
    Cordialement
    Soazig

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Le groupage fonctionne mais la raison est ici :

    Citation Envoyé par kaolivier Voir le message
    Table GESTION G qui permet de mettre plusieurs utilisateurs par client
    Il faut donc suivre la recommandation de Soazig

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Je voulais qu'il le comprenne tout seul, pour la prochaine fois.
    cordialement
    Soazig

Discussions similaires

  1. N'arrive pas additioner avec SUM ou GROUP BY
    Par nonorpz dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/09/2017, 17h09
  2. Rang avec sum et group by
    Par Dadishome dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/05/2010, 21h52
  3. Probleme avec SUM et GROUP BY de 2 tables [FIREBIRD]
    Par fthdz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 14/02/2010, 18h22
  4. PB Pourcentage Sur requête avec SUM et GROUP BY
    Par laetus dans le forum Langage SQL
    Réponses: 9
    Dernier message: 11/06/2009, 14h18
  5. [SQL] Jointure de table avec SUM et GROUP BY
    Par waterjetmedia dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/09/2007, 13h17

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