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 :

SUM et JOIN


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut SUM et JOIN
    Bonjour,

    n'ayant pas la maîtrise d'SQL, je tourne un peu rond pour cette requête...

    J'ai 3 tables
    - calendrier
    - stages
    - bilan2014

    la clé REF commune a ces tables.

    Je voudrais présenter un tableau: avec RECETTE & DEPENSES ---en SUM

    ----------------------------------------------------------
    *** REFXXX *** RECETTE *** DEPENSES -
    ----------------------------------------------------------

    Donc j'ai fait la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
        calendrier.REF
    FROM
        calendrier
    LEFT JOIN
        (SELECT SUM(stages.RECETTE) AS recette FROM stages GROUP BY stages.REF) bilan2014 ON calendrier.REF=stages.REF
    LEFT JOIN
        (SELECT SUM(bilan2014.montant) AS depense FROM bilan2014 GROUP BY bilan2014.REF) stages ON calendrier.REF=bilan2014.REF
    Qui ne fonctionne pas...

    j'avais essayé ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT calendrier.REF, SUM(stages.RECETTE) AS recette, SUM(bilan2014.montant) AS depenses 
    FROM stages,calendrier,bilan2014  
    WHERE calendrier.REF=stages.REF=bilan2014
    AND Conditions.............  
    GROUP BY calendrier.REF
    Les résultats s'affichent avec des erreurs de montant dans les SUM.
    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 965
    Points : 30 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Bonjour hogz_hogz,


    On va supposer que pour chaque valeur de la colonne Ref de la table CALENDRIER, cette valeur est aussi présente dans la colonne Ref de la table STAGE et dans la colonne Ref de la table BILAN2014.

    Pour calculer le total des recettes :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Ref, COALESCE (SUM(Recette), 0) As TotalRecette 
    FROM   STAGE 
    GROUP BY Ref ;

    La fonction COALESCE est là pour affecter la valeur 0 à SUM(Recette) si le résultat de l’opération d’agrégation est marqué NULL.


    Pour calculer le total des montants :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Ref, COALESCE (SUM(Montant), 0)  As TotalMontant
    FROM   BILAN2014 
    GROUP BY Ref ;


    Du point de vue théorique, le résultat de chaque SELECT ci-dessus est une table, on peut donc en effectuer la jointure :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT x.Ref, x.TotalRecette, y.TotalMontant
    FROM   (SELECT Ref, COALESCE (SUM(Recette), 0) As TotalRecette 
            FROM   STAGE 
            GROUP BY Ref) AS x 
    INNER JOIN
          (SELECT Ref, COALESCE (SUM(Montant), 0) As TotalMontant 
           FROM   BILAN2014 
           GROUP BY Ref) AS y
    ON x.Ref = y.Ref ;

    Ce qui suffit pour fournir le résultat attendu.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci, jamais je n'aurai trouvé .... J'ai pourtant consulté une masse de page web à la recherche du moindre indice.
    Limpide...
    Je vais me pencher sérieusement sur COALESCE...
    Encore merci....

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

Discussions similaires

  1. Left Outer Join + sum
    Par Mr Hulot dans le forum SQL
    Réponses: 2
    Dernier message: 18/01/2011, 17h40
  2. SQL : JOIN + SUM
    Par fhmayn dans le forum SQL
    Réponses: 3
    Dernier message: 04/06/2010, 14h32
  3. LEFT JOIN + SUM
    Par herve_martin_ dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/06/2009, 00h20
  4. Fonction SUM avec INNER JOIN
    Par bobosh dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 10/09/2008, 17h26
  5. 2 SUM 2 LEFT JOIN 3 tables et ça marche pas.
    Par thanaos dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/05/2007, 10h27

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