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() sur 2 tables


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 52
    Par défaut SUM() sur 2 tables
    Bonjour à tous,

    2 tables avec clé commune :
    - factures (avec notamment le montant total)
    - factures_articles (car plusieurs articles par factures)


    Et j'aimerai sortir le total des factures par rapport à un article, j'ai donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT
    	SUM(f.Total) AS TOT_HT
    FROM
    	factures f , factures_articles fa
    WHERE
    	fa.IdFacture = f.IdFacture AND
    	fa.IdArticle = 85

    Problème : si j'ai 3 articles sur une facture il me compte 3 fois le total !
    J'ai essayer un GROUP BY mais c'est pire.

    Peut-on calculer le total d'un champ quand on lit 2 tables ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    A quoi te sert la table des articles si tu n'utilise que le f.Total ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT
    	SUM(f.Total) AS TOT_HT
    FROM
    	factures f

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 52
    Par défaut
    Pour le WHERE :

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    oui, bien sûr :

    Le CA généré par le produit 85 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT SUM(fa.NbArticles * fa.PrixU) AS TOT_HT
    FROM factures f 
      INNER JOIN factures_articles fa ON fa.IdFacture = f.IdFacture 
    WHERE fa.IdArticle = 85
    Le CA généré par les factures incluant le produit 85 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT SUM(f.Total) AS TOT_HT
    FROM factures f 
    WHERE f.IdFacture IN (SELECT fa.IdFacture 
      FROM factures_articles fa 
      WHERE fa.IdArticle = 85
    )

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 52
    Par défaut
    Puissant ce "IN", j'avais déjà vu mais jamais utilisé, c'est ce qu'il me fallait, super

    Merci Antoun

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    puissant mais très mal optimisé... si tu as des problèmes de perf, il est possible de le ré-écrire sous forme de sous-req DISTINCT dans le FROM...

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

Discussions similaires

  1. SUM sur trois tables
    Par charrynsasi dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/04/2012, 18h17
  2. Problème de sum sur 2 tables différentes
    Par grinder59 dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/02/2012, 13h35
  3. SUM sur deux tables
    Par grunk dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/11/2011, 17h06
  4. Requete SUM sur une table avec critère sur une autre
    Par wail00 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/05/2007, 16h58
  5. Sum de deux champs sur deux tables différentes
    Par kluh dans le forum Oracle
    Réponses: 11
    Dernier message: 29/09/2005, 18h21

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