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 :

Requête complexe avec COUNT


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Par défaut Requête complexe avec COUNT
    Bonjour à tous,

    Je me perds dans une requête un peu complexe.

    J'ai 5 tables :
    1 table Categorie
    1 table Titre
    1 table MotsClés
    +
    1 table qui relie 1 titre à 1 Catégorie (1 catégorie peut regrouper plusieurs titres)
    +
    1 table qui relie 1 titre à 1 mots clés (1 mots clés peut avoir plusieurs titres, et 1 titre peut avoir plusieurs mots clés).

    Je souhaite récupérer dans ma requête la liste des mots clés présents dans chaque catégorie ET compter combien de fois chaque mot clé apparait.

    J'ai fait la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT D.id_motscles,D.nom 
    FROM titre C,titrecategorie T, categorie V, MotsClesCategorie K, MotsCles D 
    WHERE C.id_titre=T.id_titre 
    AND T.id_categorie=V.id_categorie 
    AND K.id_titre=C.id_titre 
    AND K.id_motscles=D.id_motscles 
    AND V.nom="Categorie1"
    Cela me retourne bien la liste des Mots clés de la catégorie 1.
    Par contre je voudrais pouvoir ajouter un count pour compter pour CHAQUE mot clé, combien de fois il est présent dans cette catégorie 1.

    Par exemple :
    1, MotClé1, 3(fois)
    2, MotClé2, 5(fois)
    5, MotClé5, 1(fois)

    Merci d'avance pour vos conseils.

    P.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    Lisez ceci dans un premier lieu pour régulariser vos jointures :
    http://sqlpro.developpez.com/cours/sqlaz/jointures/

    En particulier le chapitre III "Syntaxe normalisée des jointures"

    Ensuite concernant votre problème :
    http://sqlpro.developpez.com/cours/sqlaz/ensembles/
    Et ca sera le 1er chapitre.

  3. #3
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    Et pourrais-je rajouter : le formatage de la requête .

    Cela rend sa lecture et donc sa correction tellement plus agréable

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Par défaut
    Effectivement, je suis désolé.

    Je viens de reprendre la requête, cela fait donc ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT D.id_motscles,D.nom 
    FROM titre C JOIN titrecategorie T 
      ON C.id_titre=T.id_titre 
    JOIN categorie V 
     ON T.id_categorie=V.id_categorie 
    JOIN MotsClesCategorie K 
     ON K.id_titre=C.id_titre 
    JOIN MotsCles D 
     ON K.id_motscles=D.id_motscles
    WHERE V.nom="Categorie1"
    Je pense que les jointures sont plus propres là Désolé.

    Je pense ajouter GROUP BY K.id_motscles au niveau des tables
    puis faire un COUNT (C.id_titre) au niveau du select, mais cela ne marche pas.

    Qu'est-ce que je fais mal ?

    Merci de votre aide.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Par défaut
    Quel con !
    En fait je mettais le GROUP BY au mauvais endroit !

    Donc la requête qui fonctionne fait donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT D.id_motscles,D.nom, COUNT(C.id_titre) AS NOMBRE
    FROM titre C JOIN titrecategorie T 
      ON C.id_titre=T.id_titre 
    JOIN categorie V 
     ON T.id_categorie=V.id_categorie 
    JOIN MotsClesCategorie K 
     ON K.id_titre=C.id_titre 
    JOIN MotsCles D 
     ON K.id_motscles=D.id_motscles
    WHERE V.nom="Categorie1" GROUP BY K.id_motscles
    Et voilà le travail.
    Merci pour vos conseils.

    P.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    attention, il manque un élément dans le GROUP BY
    ET ce n'est pas le bon élément

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT D.id_motscles,D.nom, COUNT(C.id_titre) AS NOMBRE
    FROM titre C JOIN titrecategorie T 
      ON C.id_titre=T.id_titre 
    JOIN categorie V 
     ON T.id_categorie=V.id_categorie 
    JOIN MotsClesCategorie K 
     ON K.id_titre=C.id_titre 
    JOIN MotsCles D 
     ON K.id_motscles=D.id_motscles
    WHERE V.nom="Categorie1" 
    GROUP BY D.id_motscles,D.nom

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

Discussions similaires

  1. Requête complexe avec 14 tables
    Par Kawabaumga dans le forum Développement
    Réponses: 7
    Dernier message: 14/05/2010, 10h24
  2. Requête complexe avec plusieurs lignes par table
    Par Iwazaru dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/09/2009, 09h46
  3. Requète Complexe avec GROUP BY et classement descendant
    Par snoups58 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/10/2008, 18h44
  4. requête erronée avec count (*)
    Par arcane dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/09/2008, 16h43
  5. [SQL] Requête complexe avec appel multiple à la même table
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/04/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