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 et aggrégation


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Jointure et aggrégation
    Bonjour,

    Je crée des requêtes SQL à la volée, pour faire des statistiques sur ma base de données. Je ne suis donc pas très libre pour faire des requêtes très compliquées.

    J'ai trois tables :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    commentaire
    -----------------------------------------
       id   |   commentaire   	  | nbheure
    -----------------------------------------
      1    |    blabla            |    2
      2    |    bla bla           |    3
      3    |    bla bla bla       |    4
      4    |    bla               |    1
     
    reponse
    -------------------------------------------------
       id   |   reponse       |  auteur_id  | commentaire_id
    -------------------------------------------------
      1    |    blabla        |     1       |        1
      2    |    blabla        |     1       |        2
      3    |    blabla        |     2       |        1
      4    |    blabla        |     3       |        2
      5    |    blabla        |     2       |        3
     
    auteur
    ------------------
       id   |   auteur
    ------------------
      1    |    dupont
      2    |    durand
      3    |    duchmol
    Je cherche à connaître la somme du nombre d'heure associé au commentaire, en fonction de l'auteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    --------------------------
      auteur  |    nbheure
    --------------------------
     dupont   |      5
     durand   |      6
     duchmol  |      3
    J'ai trouvé ceci, qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT auteur, SUM(nbheure)
    FROM (
    SELECT DISTINCT commentaire.id, auteur.auteur as auteur, commentaire.nbheure
    FROM commentaire
    LEFT JOIN reponse ON reponse.commentaire_id = commentaire.id
    LEFT JOIN auteur ON auteur.id = reponse.auteur_id
    ) as tmp
    GROUP BY tmp.auteur
    Cependant, comme la requête est créée à la volée, je ne dois pas avoir de sous requête.
    Est-ce possible d'obtenir le même résultat, sans sous requête ?

    J'ai essayé ceci, qui renvoie un résultat faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT commentaire.id, auteur.id, SUM(auteur.nbheure)
    FROM commentaire
    LEFT JOIN reponse ON reponse.commentaire_id = commentaire.id
    LEFT JOIN auteur ON auteur.id = reponse.auteur_id
    GROUP BY auteur.id
    Merci d'avance
    Bonne journée

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Ce genre de requete peut vous aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT 
       auteur.auteur, SUM(COALESCE(nbheure,0)) AS nbheure 
    FROM
      auteur 
    LEFT OUTER JOIN reponse ON (auteur.id=reponse.auteur_id)
    LEFT OUTER JOIN commentaire ON (reponse.commentaire_id=commentaire.id)
    GROUP BY auteur.id
    Bon Courage

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Merci pour votre réponse.

    Mais je ne suis pas sensée pouvoir modifier l'ordre des tables dans ma requête...
    Les contraintes sont un peu fortes, je me rends compte, et je suis à deux doigts d'abandonner.

    Quelqu'un a une idée ?

    Merci

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Alors en changeant LEFT en RIGHT.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    C'est bon, j'ai résolu mon problème en me débrouillant pour générer la requête qui marchait.

    Merci quand même.

    MademoiselleL

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

Discussions similaires

  1. Jointure qui ne renvoie pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2024, 09h33
  2. [2008R2] Trigger avec mise à jour sur jointure + aggrégat
    Par StringBuilder dans le forum Développement
    Réponses: 7
    Dernier message: 25/01/2015, 11h05
  3. aggrégation et jointure
    Par Hakim dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/05/2009, 09h16
  4. Réponses: 14
    Dernier message: 17/03/2003, 18h31
  5. Jointures INNER et jointures classiques ???
    Par UbiK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2002, 10h29

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