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 :

synthèse de données


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
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Par défaut synthèse de données
    Soit trois tables:

    Table1
    id1 primary-key
    libelle

    Table2
    id2 primary-key
    id1 foreign-key
    qte2

    Table3
    id3 primary-key
    id1 foreign-key
    qte3

    comment afficher :
    "libelle" , "sum(qte2)", "sum(qte3)"

    sachant que Table2 et Table 3 n'on pas forcément des données correspondant à Table1

    J'ai essayé avec des left join, inner join et je m'y perd. un exemple serait le bienvenu.

    merci d'avance

  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 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut
    Bonjour,

    Essaie la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.libelle, SUM(t2.qte), SUM(t3.qte)
    FROM table1 t1
    LEFT JOIN table2 t2 ON t1.id1 = t2.id1
    LEFT JOIN table3 t3 ON t1.id1 = t3.id1
    GROUP BY t1.libelle
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Par défaut
    Citation Envoyé par ced Voir le message
    Bonjour,

    Essaie la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.libelle, SUM(t2.qte), SUM(t3.qte)
    FROM table1 t1
    LEFT JOIN table2 t2 ON t1.id1 = t2.id1
    LEFT JOIN table3 t3 ON t1.id1 = t3.id1
    GROUP BY t1.libelle
    ced
    C'est exactement ce que j'ai essayé, mais il semble sommer plus que prévu.

    j'ai 1 enregistrement sur table1 qui est lié à
    4 enregistrements dans table2 et 5 enregistrements dans table3

    si je remplace les sum par des count,
    j'ai :
    monlibelle , 20, 20

    alors que j'attends :
    monlibelle , 4, 5

  4. #4
    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 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut
    Attention, SUM et COUNT, ça n'est pas la même chose...
    Surtout que tu dois faire COUNT(*) dans les 2 cas, et il te ramène donc 20 lignes, d'où le résultat...
    As-tu moyen de vérifier les sommes. Normalement, dans un SUM, si la donnée vaut NULL, elle compte pour 0.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Par défaut
    Les sommes ne sont pas égales,
    somme de qté2 affichée = 5 fois le résultat attendu
    somme de qté3 affichée = 4 fois le résultat attendu
    et voici la vrai requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT t1.e_code 'ID',  t1.e_libelle 'Libellé', sum(t2.p_id) 'S1', sum(t3.v_id) 'S2' 
    FROM  evenement t1
    LEFT JOIN evenement_participation t2 ON (t1.e_code = t2.e_code)
    LEFT JOIN evenement_vehicule t3 ON (t1.e_code = t3.e_code)
    GROUP BY t1.e_code, t1.e_libelle  
    ORDER BY t1.e_libelle
    et si ca marche, il me faudra ensuite le même type de requête avec count(t2.p_id) et count(t3.v_id)

  6. #6
    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 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut
    Ouh là ...
    J'ai raconté n'importe quoi, moi !
    En fait, c'est normal que tu trouves 20 lignes et que les sommes et autres comptes soient si élevés.
    En faisant des jointures, on met sur une même ligne tout ce qui peut être commun à table1, table2 et table3. On fait un produit des lignes communes.

    Ce que tu cherches à faire s'apparente plus à 2 requêtes distinctes réunies (par une clause UNION par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select libelle, sum(qte2), sum(qte3)
    from (
      select t1.libelle, sum(t2.qte) as qte2, 0 as qte3
      from table1 t1
      inner join table2 t2 on t1.id1 = t2.id1
      group by t1.libelle
      union
      select t1.libelle, 0, sum(t3.qte)
      from table1 t1
      inner join table3 t3 on t1.id1 = t3.id1
      group by t1.libelle
    ) as t
    group by t.libelle
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

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

Discussions similaires

  1. [Toutes versions] Croiser des données avec comme synthèse des données alphanumériques
    Par Philippe Tulliez dans le forum Contribuez
    Réponses: 0
    Dernier message: 19/02/2014, 08h48
  2. Réponses: 3
    Dernier message: 24/09/2011, 19h40
  3. [XL-2003] Synthèse de données issues de différents onglets pour obtention de table
    Par surzone dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/12/2010, 15h52
  4. synthèse de données
    Par jober94 dans le forum Excel
    Réponses: 3
    Dernier message: 16/12/2008, 19h35
  5. Réponses: 0
    Dernier message: 26/07/2007, 16h23

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