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 :

Jointure SQL et SUM


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Points : 66
    Points
    66
    Par défaut Jointure SQL et SUM
    Bonjour,

    J'ai un petit problème dans une requête SQL, très simple à faire en PL/SQL.

    Mais je préfèrerais ne pas avoir à passer par une procédure et exécuter seulement une requête "directe" de SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    select 
           a.id,
           sum(a.montant) as mtt_ttl_a,
           sum(b.montant) as mtt_ttl_b
    from
      table_A a, 
      table_B b,
    where
      a.id = b.id
    group by
      a.id
    Le problème étant qu'il me multiplie la somme par le nombre de ligne qu'il parcourt.

    Par exemple si a.montant = 1 et b.montant = 1, il va me marquer en sortie
    la somme multipliée par le nombre de ligne qu'il a parcouru ....

    Merci d'avance pour les explications

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Prenez l'habitude d'écrire vos jointures de manière normalisée (syntaxe INNER JOIN... ON... plutôt qu'en séparant les tables par des virgules).
    Sinon, le résultat renvoyé est logique, compte tenu de la jointure.
    La question est donc : que souhaitez-vous exactement comme résultat ?
    Peut-on avoir un exemple du contenu des tables, et le résultat attendu en sortie de requête ?

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    À mon avis vous voulez faire ceci :
    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
    17
    18
    With TA as
    (
      select id, sum(montant) AS mtt_ttl_a
        from table_A
    group by id
    )
      ,  TB as
    (
      select id, sum(montant) AS mtt_ttl_b
        from table_B
    group by id
    )
    select TA.id
         , TA.mtt_ttl_a
         , TB.mtt_ttl_b
      from TA
           INNER JOIN TB
             ON TB.id = TA.id;
    Si vous avez des données qui existent dans une table et pas dans l'autre, il faut joindre différemment :
    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
    17
    18
    With TA as
    (
      select id, sum(montant) AS mtt_ttl_a
        from table_A
    group by id
    )
      ,  TB as
    (
      select id, sum(montant) AS mtt_ttl_b
        from table_B
    group by id
    )
    select coalesce(TA.id, TB.id) as id
         , coalesce(TA.mtt_ttl_a, 0) as mtt_ttl_a
         , coalesce(TB.mtt_ttl_b, 0) as mtt_ttl_b
      from TA
           FULL OUTER JOIN TB
             ON TB.id = TA.id;

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Points : 66
    Points
    66
    Par défaut
    Merci c'est exactement le résultat de ce que j'attends avec la première requête SQL.

    Je pensais que la requête "serait" plus simple, étant débutant... je vais maintenant chercher à la comprendre !

    Merci beaucoup

    (déjà je ne connaissais pas du tout le "with" et ce genre de syntaxe...de même pour le inner join... jamais vu on m'a toujours appris des jointures avec les virgules en cours d'ingé...!

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

Discussions similaires

  1. [MS Query] neophyte demande aide sur jointures SQL
    Par thorgal972 dans le forum Langage SQL
    Réponses: 19
    Dernier message: 27/11/2006, 17h13
  2. [SQL Server] jointure externe et SUM
    Par TangoZoulou dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/11/2006, 15h13
  3. [SQL] PB : Jointure SQL ne fonctionne pas..
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/09/2006, 14h03
  4. Réponses: 1
    Dernier message: 28/07/2006, 03h57
  5. Réponses: 4
    Dernier message: 11/10/2005, 10h17

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