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

SQL Oracle Discussion :

Group By, sous-requêtes et jointures


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 63
    Par défaut Group By, sous-requêtes et jointures
    Bonjour à tous.

    Je possède les tables suivantes (dont je n'ai précisé que les attributs intéressants ) :
    Categorie (identifiant_categorie)
    article (identifiant_article)
    revue(identifiant_revue)
    lectures(#identifiant_article)
    categorie_revue(#identifiant_revue,#identifiant_categorie)
    article_revue(#identifiant_revue,#identifiant_article)

    Dont je souhaiterai récupérer le nombre d'articles lus par catégorie de revue

    J'ai donc pour le moment cette requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT cat.identifiant_categorie, (SELECT count(lect.identifiant_article) FROM lectures lect WHERE lect.identifiant_ article= cr.identifiant_article) AS lus FROM categorie cat
    FULL OUTER JOIN categorie_revue cr ON cr.identifiant_categorie = categorie.identifiant_categorie
    FULL OUTER JOIN revue r ON r.identifiant_revue=cr.identifiant_revue
    FULL OUTER JOIN article_revue ar ON ar.identifiant_revue = r.identifiant_revue;

    La requête fonctionne mais je n'arrive pas à faire de group by sur les identifiants de categorie, à cause de la sous-requête
    Comment puis-je procéder ?
    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par défaut
    Bonsoir

    Ceci devrait faire l'affaire
    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
     
    select CAT.identifiant_categorie       as CATID
         , CAT.libelle                     as CATLib
         , count(*)                        as NB_Art_lus
    from CATEGORIE as CAT
    inner join categorie_revue as CRV
       on CRV.identifiant_categorie = CAT.identifiant_categorie 
    inner join revue as REV
       on REV.identifiant_revue=CRV.identifiant_revue
    inner join article as ART
       on ART.identifiant_revue=REV.identifiant_revue
    inner join lectures as LEC
       on LEC.identifiant_article=ART.identifiant_article
    group by CAT.identifiant_categorie       
           , CAT.libelle
    order by CAT.identifiant_categorie
    Notes :

    • vu vos FK, une revue est dans plusieurs catégories, du coup, un même article sera compté plusieurs fois
    • pour votre besoin, il n'y a aucun intérêt à faire des jointures OUTER, encore moins FULL OUTER

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 63
    Par défaut
    Merci pour votre réponse.

    Cela ne fonctionne pas, il n'ya pas d'identifiant de revue dans le table article, il faut passer par la table article_revue pour y accéder.

    Aussi il y'a des contraintes sur les tables, donc une revue ne peut pas apparaître dans deux catégories.

    Pourriez-vous m'expliquer pourquoi les jointures que j'avais proposées ne sont pas adaptées au problème ?

    Merci

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par défaut
    En ce cas il suffit d'ajouter la table que j'ai oubliée (alias ARV ci-dessous)


    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
    select CAT.identifiant_categorie       as CATID
         , CAT.libelle                     as CATLib
         , count(*)                        as NB_Art_lus
    from CATEGORIE as CAT
    inner join categorie_revue as CRV
       on CRV.identifiant_categorie = CAT.identifiant_categorie 
    inner join revue as REV
       on REV.identifiant_revue=CRV.identifiant_revue
    inner join article_revue as ARV
       on ARV.identifiant_revue = REV.identifiant_revue
    inner join article as ART
       on ART.identifiant_revue=ARV.identifiant_revue
    inner join lectures as LEC
       on LEC.identifiant_article=ART.identifiant_article
    group by CAT.identifiant_categorie       
           , CAT.libelle
    order by CAT.identifiant_categorie
    FULL OUTER JOINserait utile si vous vouliez récupérer toutes les infos si présentes, y compris pour des articles ne correspondant à aucune catégorie de revue par exemple

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

Discussions similaires

  1. Linq Group Vu et Jointure
    Par mdordenart dans le forum Linq
    Réponses: 0
    Dernier message: 22/08/2012, 14h22
  2. GROUP BY et JOINTURE
    Par wehtam dans le forum Requêtes
    Réponses: 8
    Dernier message: 18/10/2010, 15h46
  3. GROUP BY et JOINTURE ?
    Par ebaynaud dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/04/2009, 15h28
  4. [Oracle 9i] GROUP BY avec jointure.
    Par requinc dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/04/2006, 12h29
  5. Groupe By avec jointure
    Par batoubat dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/12/2005, 14h12

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