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 :

Ne pouviez vous pas me consulter?


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Points : 29
    Points
    29
    Par défaut Ne pouviez vous pas me consulter?
    Bonjour,
    je suis un etudiant qui fais ses etudes a la faculté informatique.

    Actuellement je travaille sur mon projet professionnel dont le sujet est de créer une base des données multifonctionelle qui permet de gerer des notes de notre institut.

    Pour le moment j' aissais d' ecrir une requête qui doit afficher les modules pour chaque etudiant à partir de calcule les moyennes de notes recues en branches correspondantes.

    Le module represente la moyenne arithmetique des resultats des examens en branches inclues dans ce module. Il y a 11 modules, donc 11 groupes de branches differantes.

    Je n' arrive qu' à afficher les modules d' un seul etudiant spécifié par son nom et prenom :

    select Nom, Prenom, AVG(Notes) AS Modules,Nom_Modules FROM Etudiant E JOIN Notes N ON E.ID=N.ID_Etudiant JOIN Modules m ON m.ID=N.ID_Modules_1 WHERE Nom="Momtselidze" AND Prenom="Lida" GROUP BY N.ID_Modules_1;
    /**Nom_Modules c' est à dir Module_N où N=1,2,3,...,11.

    Comment faire afficher tout les 11 modules pour chacun des etudiants(à partir de calcule les moyennes arithmetiques des notes des branches correspondantes)?

    Merci pour l' attention.

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Est-ce comme structure?

    Alias Table (champs)
    -------------------------------
    E Etudiant (ID, Nom, Prénom)
    N Notes (ID_Etudiant , ID_Modules_N, Notes)
    m Modules (ID, NomModules)



    Et ta requête fonctionne bien mais seulement module par module et pour un seul étudiant (dans ton exemple seulement pour le module 1)

    Quelle format de réponse voudrais-tu?
    Nom, Prénom, Module, Moyenne
    Pour tous les noms et tous les modules
    -- Jasmine --

  3. #3
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Tables
    ----------
    Etudiant(ID,Nom,Prenom,Addresse,Date_Naissance)
    Notes(ID, ID_Etudiant, ID_Formation, ID_Modules_1, Notes, Modules)
    Modules (ID, NomModules)
    Formation(ID,Branches,ID_Modules).


    Réponse
    -----------
    Nom, Prénom, Module, Branches , Notes


    Requête
    ------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Etudiant.Nom, Etudiant.Prenom, Modules.NomModules, Formation.Branches, Notes.Notes FROM Etudiant JOIN Notes ON (Etudiant.ID = Notes. ID_Etudiant) JOIN Modules ON (Notes.ID_Module_1 = Modules.ID) JOIN Formation ON (Modules.ID = Formation.ID_Modules)

    Pourrais-tu me dire si cette requête fronctionne?
    Est ce bien Notes.ID_Module_1 qui correspond à Modules.ID ?



    Pour la moyenne des notes, pourrais-tu m'expliquer? Dans ta table Notes tu as plusieurs entrées par étudiant avec différentes notes?



    Jasmine,
    -- Jasmine --

  4. #4
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour Jasmine,

    là quelque chose ne marche pas bien.tu peut voir le resultat de ta requête un peu plus bas(ici nous obtenons trois notes différentes pour chaque branche).

    Oui Jasmine, Notes.ID_Modules_1 correspond à Modules.ID et dans ma table Notes j' ai plusieurs entrées(9) par étudiants avec différentes notes. Est-il possible d'éviter plusieurs entrées par étudiants quoiqu' il y a beaucoup des branches ?

    Quant à la moyenne des notes:
    En notre institut il y a une telle système:
    Les branches sont groupées par une, deux ou trois branches par groupe. Pour que tout soit claire prenons un des ces groupes et
    l' appelons, par exemple, "Groupe_1". Dans ce groupe entrent trois branches suivantespar exemple) Math. Générale, Intro.Inform,
    Intro. Langue Orientée Objet.
    Quand un etudiant passe ses examens en ces trois branches, on calcule la moyenne arithmetique des resultats marqués par cet étudiant et cette moyenne est appelée Module. Dans ce cas comme il s' agit du "premier" groupe des branches ("Groupe_1")
    la moyenne, relativement, est apelée "Module_1".
    Il y a onze groupes des branches, relativement il y a onze modules. Ces modules doivent être calculés à partir des notes qui sont spécifiées dans la table Notes.

    Pour savoir si mon model de la base des données marche bien ou non j' ai cpécifié seulement deux étudiants dans la table Etudiants et 9 branches (Dans la table Formation(ID,Branches,ID_Modules)). Ces branches correspondent à trois modules: "Module_1", "Module_2", "Module_3". Relativement il y a 9 entrés dans la table Notes par chaque étudiant.

    Quand je lance ta requête:

    SELECT Etudiant.Nom, Etudiant.Prenom, Modules.Nom_Modules, Formation.Branches, Notes.Notes FROM Etudiant JOIN Notes ON (Etudiant.ID = Notes. ID_Etudiant) JOIN Modules ON (Notes.ID_Modules_1 = Modules.ID) JOIN Formation ON (Modules.ID = Formation.ID_Modules);

    j' obtiens le resultat suivant:

    +---------------+--------+-------------+--------------------+-------+
    | Nom | Prenom | Nom_Modules | Branches | Notes |
    +---------------+--------+-------------+--------------------+-------+
    | M | Lida | Module_1 | Intro. Info | 20 |
    | M| Lida | Module_1 | Maths Generale | 20 |
    | M | Lida | Module_1 | Utilisation PC1 | 20 |
    | M | Lida | Module_1 | Intro. Info | 18 |
    | M | Lida | Module_1 | Maths Generale | 18 |
    | M | Lida | Module_1 | Utilisation PC1 | 18 |
    | M | Lida | Module_1 | Intro. Info | 17 |
    | M | Lida | Module_1 | Maths Generale | 17 |
    | M | Lida | Module_1 | Utilisation PC1 | 17 |
    | M | Lida | Module_2 | Intr Linguist | 20 |
    | M | Lida | Module_2 | Progr Imper | 20 |
    | M | Lida | Module_2 | Intr Langues Progr | 20 |
    | M | Lida | Module_2 | Intr Linguist | 16 |
    | M | Lida | Module_2 | Progr Imper | 16 |
    | M | Lida | Module_2 | Intr Langues Progr | 16 |
    | M | Lida | Module_2 | Intr Linguist | 15 |
    | M | Lida | Module_2 | Progr Imper | 15 |
    | M | Lida | Module_2 | Intr Langues Progr | 15 |
    | M | Lida | Module_3 | Philosophie | 20 |
    | M | Lida | Module_3 | Progr Fonc | 20 |
    | M | Lida | Module_3 | Proba | 20 |
    | M | Lida | Module_3 | Philosophie | 18 |
    | M | Lida | Module_3 | Progr Fonc | 18 |
    | M | Lida | Module_3 | Proba | 18 |
    | M | Lida | Module_3 | Philosophie | 19 |
    | M | Lida | Module_3 | Progr Fonc | 19 |
    | M | Lida | Module_3 | Proba | 19 |
    | V | Marie | Module_1 | Intro. Info | 15 |
    | V | Marie | Module_1 | Maths Generale | 15 |
    | V | Marie | Module_1 | Utilisation PC1 | 15 |
    | V | Marie | Module_1 | Intro. Info | 20 |
    | V | Marie | Module_1 | Maths Generale | 20 |
    | V | Marie | Module_1 | Utilisation PC1 | 20 |
    | V | Marie | Module_1 | Intro. Info | 17 |
    | V | Marie | Module_1 | Maths Generale | 17 |
    | V | Marie | Module_1 | Utilisation PC1 | 17 |
    | V | Marie | Module_2 | Intr Linguist | 20 |
    | V | Marie | Module_2 | Progr Imper | 20 |
    | V | Marie | Module_2 | Intr Langues Progr | 20 |
    | V | Marie | Module_2 | Intr Linguist | 18 |
    | V | Marie | Module_2 | Progr Imper | 18 |
    | V | Marie | Module_2 | Intr Langues Progr | 18 |
    | V | Marie | Module_2 | Intr Linguist | 20 |
    | V | Marie | Module_2 | Progr Imper | 20 |
    | V | Marie | Module_2 | Intr Langues Progr | 20 |
    | V | Marie | Module_3 | Philosophie | 13 |
    | V | Marie | Module_3 | Progr Fonc | 13 |
    | V | Marie | Module_3 | Proba | 13 |
    | V | Marie | Module_3 | Philosophie | 20 |
    | V | Marie | Module_3 | Progr Fonc | 20 |
    | V | Marie | Module_3 | Proba | 20 |
    | V | Marie | Module_3 | Philosophie | 20 |
    | V | Marie | Module_3 | Progr Fonc | 20 |
    | V | Marie | Module_3 | Proba | 20 |




    la relevée des notes est suivante:

    (SELECT Nom,Prenom, Nom_Modules,Branches,Notes FROM Etudiant e JOIN Notes n ON n.ID_Etudiant=e.ID JOIN Modules m ON m.ID=n.ID_Modules_1 JOIN Formation f ON f.ID=n.ID_Formation

    +---------------+--------+-------------+--------------------+-------+
    | Nom | Prenom | Nom_Modules | Branches | Notes |
    +---------------+--------+-------------+--------------------+-------+
    | M | Lida | Module_1 | Intro. Info | 20 |
    | M | Lida | Module_1 | Maths Generale | 18 |
    | M | Lida | Module_1 | Utilisation PC1 | 17 |
    | M | Lida | Module_2 | Intr Linguist | 20 |
    | M | Lida | Module_2 | Progr Imper | 16 |
    | M | Lida | Module_2 | Intr Langues Progr | 15 |
    | M | Lida | Module_3 | Philosophie | 20 |
    | M| Lida | Module_3 | Progr Fonc | 18 |
    | M| Lida | Module_3 | Proba | 19 |
    | V| Marie | Module_1 | Intro. Info | 15 |
    | V | Marie | Module_1 | Maths Generale | 20 |
    | V| Marie | Module_1 | Utilisation PC1 | 17 |
    | Vi | Marie | Module_2 | Intr Linguist | 20 |
    | V | Marie | Module_2 | Progr Imper | 18 |
    | V | Marie | Module_2 | Intr Langues Progr | 20 |
    | V| Marie | Module_3 | Philosophie | 13 |
    | V | Marie | Module_3 | Progr Fonc | 20 |
    | V | Marie | Module_3 | Proba | 20 |
    +---------------+--------+-------------+--------------------+-------+

    Maintenent je n' arrive pas à rajouter une colonne "Moyenne" crée à partir de la calcule des notes où les resultats serons arrangés d' aprés
    les modules (ID_Modules_1 dans la table Notes je pense) de chaque étudiant.

    Pour moi il est très agreable de rencontrer les personnes aussi attentives que toi Jasmine.
    J' attends ta reponce.
    Merci.



    Otar

    Notes.Modules vaut bien Modules.Nom_Modules ?

    Si oui, tu peux simplifier en ne faisant appel qu’à deux tables :
    Mais tu n’auras plus le détail des branches

    Etudiant(ID,Nom,Prenom,Addresse,Date_Naissance)
    Notes(ID, ID_Etudiant, ID_Formation, ID_Modules_1, Notes, Modules)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Etudiant.Nom, Etudiant.Prenom, AVG(Notes.Notes) FROM Etudiant INNER JOIN Notes ON (Etudiant.ID = Notes. ID_Etudiant
    GROUP BY Etudiant.Nom, Etudiant.Prenom, Notes.Modules;
    Cela fonctionne-t'il?




    Jasmine,
    -- Jasmine --

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Jasmine80
    Notes.Modules vaut bien Modules.Nom_Modules ?

    Si oui, tu peux simplifier en ne faisant appel qu’à deux tables :
    Mais tu n’auras plus le détail des branches

    Etudiant(ID,Nom,Prenom,Addresse,Date_Naissance)
    Notes(ID, ID_Etudiant, ID_Formation, ID_Modules_1, Notes, Modules)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Etudiant.Nom, Etudiant.Prenom, AVG(Notes.Notes) FROM Etudiant INNER JOIN Notes ON (Etudiant.ID = Notes. ID_Etudiant
    GROUP BY Etudiant.Nom, Etudiant.Prenom, Notes.Modules;
    Cela fonctionne-t'il?




    Jasmine,




    après avoir essayer en vain d' ecrire une requête pour afficher les modules pour chaque etudiant en calculant les moyennes des notes j' ai décidé de calculer et introduir manuellement ces resultats(moyennes) dans la table Notes. C' est pourquoi j' ai rajouté cette colonne "Modules" à la table Notes. Mais apres j' ai décidé de ne pas faire une telle bêtise.
    Donc on peut dir que cette colonne Notes.Modules n' existe pas.

    Logiquement cette requête doit renvoyer les moyennes d' après les modules pour tout les étudiants, mais ca ne se fait que pour le premier étudiant spécifié dans la table Etudiant.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Nom, Prenom, AVG(Notes) AS Modules,Nom_Modules  FROM  Etudiant E JOIN  Notes N ON  E.ID=N.ID_Etudiant JOIN    Modules m ON m.ID=N.ID_Modules_1  GROUP BY N.ID_Modules_1;

    otar

  6. #6
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    En utilisant ces 3 tables
    ---------------------------
    Etudiant(ID,Nom,Prenom,Addresse,Date_Naissance)
    Notes(ID, ID_Etudiant, ID_Formation, ID_Modules_1, Notes, Modules)
    Modules (ID, NomModules)

    Requête
    -----------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Etudiant.Nom, Etudiant.Prenom, AVG(Notes.Notes) FROM Etudiant JOIN Notes ON (Etudiant.ID = Notes. ID_Etudiant) JOIN Modules ON (Notes.ID_Module_1 = Modules.ID) 
    GROUP BY Etudiant.Nom, Etudiant.Prenom, Modules.NomModules

    Résultat
    ----------

    Tu devrais obtenir:

    +---------------+--------+-------------+--------------------+-------+
    | Nom | Prenom | Nom_Modules | AVG(Note) |
    +---------------+--------+-------------+--------------------+-------+
    | M | Lida | Module_1 | 20 |
    | M | Lida | Module_2 | 20 |
    | M | Lida | Module_3 | 20 |
    | V | Marie | Module_1 | 15 |





    Jasmine,
    -- Jasmine --

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Jasmine80
    En utilisant ces 3 tables
    ---------------------------
    Etudiant(ID,Nom,Prenom,Addresse,Date_Naissance)
    Notes(ID, ID_Etudiant, ID_Formation, ID_Modules_1, Notes, Modules)
    Modules (ID, NomModules)

    Requête
    -----------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Etudiant.Nom, Etudiant.Prenom, AVG(Notes.Notes) FROM Etudiant JOIN Notes ON (Etudiant.ID = Notes. ID_Etudiant) JOIN Modules ON (Notes.ID_Module_1 = Modules.ID) 
    GROUP BY Etudiant.Nom, Etudiant.Prenom, Modules.NomModules

    Résultat
    ----------

    Tu devrais obtenir:

    +---------------+--------+-------------+--------------------+-------+
    | Nom | Prenom | Nom_Modules | AVG(Note) |
    +---------------+--------+-------------+--------------------+-------+
    | M | Lida | Module_1 | 20 |
    | M | Lida | Module_2 | 20 |
    | M | Lida | Module_3 | 20 |
    | V | Marie | Module_1 | 15 |





    Jasmine,


    Jasmine, je te remercie du coeur.
    Ça marche très bien.
    Voila mon resultat:



    +---------------+--------+------------------+-------------+
    | Nom | Prenom | AVG(Notes.Notes) | Nom_Modules |
    +---------------+--------+------------------+-------------+
    | Momtselidze | Lida | 18.3333 | Module_1 |
    | Momtselidze | Lida | 17.0000 | Module_2 |
    | Momtselidze | Lida | 19.0000 | Module_3 |
    | Varcimashvili | Marie | 17.3333 | Module_1 |
    | Varcimashvili | Marie | 19.3333 | Module_2 |
    | Varcimashvili | Marie | 17.6667 | Module_3 |
    +---------------+--------+------------------+-------------+

    C' est fait. Mais je ne comprends pas bien. Je pensais qu'il falait de regrouper les resultats d' après une seule critère: "ID_Modules_1" sinon la mashine ne comprendrait pas. Mais quand j' ecrivais la code seulement avec "Notes.ID_Modules_1" après "GROUP BY",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Nom, Prenom, AVG(Notes) AS Modules,Nom_Modules  FROM  Etudiant E JOIN  Notes N ON  E.ID=N.ID_Etudiant JOIN    Modules m ON m.ID=N.ID_Modules_1  GROUP BY N.ID_Modules_1;
    la machine renvoyait le nom du premier etudiant et la moyenne de tout resultats marqués par tout les étudiants dans tel ou tel module.
    Jasmine, s' il te plait explique moi la logique de ce fragment de ta code qui est ecrite après GROUP BY.

  8. #8
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Dans le GROUP BY tu peux regrouper selon plusieurs éléments. Il fera dans ce cas les moyennes pour tous les groupes possibles.
    Ainsi si tu as deux personnes ayant le même nom de famille, leur moyenne sera bien distincte.

    GROUP BY Name, Firstname

    POUR
    -------
    Dupont, Paul
    Dupont, Marie

    Cela te fera deux groupes.


    Est-ce plus clair?


    Jasmine,



    PS: n'oublie pas d'indiquer que ton problème est résolu
    -- Jasmine --

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Jasmine80
    Dans le GROUP BY tu peux regrouper selon plusieurs éléments. Il fera dans ce cas les moyennes pour tous les groupes possibles.
    Ainsi si tu as deux personnes ayant le même nom de famille, leur moyenne sera bien distincte.

    GROUP BY Name, Firstname

    POUR
    -------
    Dupont, Paul
    Dupont, Marie

    Cela te fera deux groupes.


    Est-ce plus clair?


    Jasmine,



    PS: n'oublie pas d'indiquer que ton problème est résolu






    Jasmine, quand je lance ta requête avec "Notes.ID_Etudiant" au lieu de "Etudiant.Nom" et"Etudiant.Prenom" j' obtiens le meme resultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Etudiant.Nom, Etudiant.Prenom, AVG(Notes.Notes),Nom_Modules FROM Etudiant JOIN Notes ON (Etudiant.ID = Notes. ID_Etudiant) JOIN Modules ON (Notes.ID_Modules_1 = Modules.ID)  GROUP BY Notes.ID_Etudiant, Modules.Nom_Modules;

    Table Notes

    +----+-------------+--------------+--------------+-------+---------+
    | ID | ID_Etudiant | ID_Formation | ID_Modules_1 | Notes
    +----+-------------+--------------+--------------+-------+---------+
    | 1 | 1 | 1 | 1 | 20 |
    | 2 | 1 | 2 | 1 | 18 |
    | 3 | 1 | 3 | 1 | 17 |
    | 4 | 1 | 4 | 2 | 20 |
    | 5 | 1 | 5 | 2 | 16 |
    | 6 | 1 | 6 | 2 | 15 |
    | 7 | 1 | 7 | 3 | 20 |
    | 8 | 1 | 8 | 3 | 18 |
    | 9 | 1 | 9 | 3 | 19 |
    | 10 | 2 | 1 | 1 | 15 |
    | 11 | 2 | 2 | 1 | 20 |
    | 12 | 2 | 3 | 1 | 17 |
    | 13 | 2 | 4 | 2 | 20 |
    | 14 | 2 | 5 | 2 | 18 |
    | 15 | 2 | 6 | 2 | 20 |
    | 16 | 2 | 7 | 3 | 13 |
    | 17 | 2 | 8 | 3 | 20 |
    | 18 | 2 | 9 | 3 | 20 |
    +----+-------------+--------------+--------------+-------+---------+

    Quand il s' agit de "ID_Etudiant" je comprends tout car un ID_Etudiant correspond à tout les modules. Mais comme Nom et Prenom d' un étudiant est specifié une seule fois, ici je m' embrouille un peu.

  10. #10
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Jasmine, quand je lance ta requête avec "Notes.ID_Etudiant" au lieu de "Etudiant.Nom" et"Etudiant.Prenom" j' obtiens le meme resultat.
    Ce qui est normal étant donné qu'à chaque combinaion nom-prénom correspond un ID_etudiant.


    Quand il s' agit de "ID_Etudiant" je comprends tout car un ID_Etudiant correspond à tout les modules. Mais comme Nom et Prenom d' un étudiant est specifié une seule fois, ici je m' embrouille un peu.
    Je ne comprends pas bien ce que tu veux dire.

    ID_Etudiant correspond à tout les modules?
    Pour chaque ID_etudiant, tu as tous les modules
    ID_etudiant Module_1
    ID_etudiant Module_2
    ID_etudiant Module_3

    Idem pour les associations Nom-Prénom
    [Nom Prenom] Module_1
    [Nom Prenom] Module_2
    [Nom Prenom] Module_3

    Etant donné que faire la recherche en se basant sur ID_Etudiant (GROUP BY Notes.ID_Etudiant) ou se basant sur l'association [Nom-Prénom] (en regroupant GROUP BY Etudiant.Nom, Etudiant.Prenom) revient exactement au même



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Etudiant.Nom, Etudiant.Prenom, AVG(Notes.Notes) FROM Etudiant JOIN Notes ON (Etudiant.ID = Notes. ID_Etudiant) JOIN Modules ON (Notes.ID_Module_1 = Modules.ID) 
    GROUP BY Etudiant.Nom, Etudiant.Prenom, Modules.NomModules
    équivaut donc à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Etudiant.Nom, Etudiant.Prenom, AVG(Notes.Notes) FROM Etudiant JOIN Notes ON (Etudiant.ID = Notes. ID_Etudiant) JOIN Modules ON (Notes.ID_Module_1 = Modules.ID) 
    GROUP BY Notes.ID_Etudiant, Modules.NomModules
    dans la première tu regroupes selon le nom et le prénom et dans la second selon l'ID mais cela équivaut exactement au même regroupement.


    Est-ce plus clair?


    Jasmine,
    -- Jasmine --

  11. #11
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    [QUOTE=Jasmine80]Ce qui est normal étant donné qu'à chaque combinaion nom-prénom correspond un ID_etudiant.



    Je ne comprends pas bien ce que tu veux dire.

    Ici je voulais dir que Notes.ID_Etudiant a plusieurs entrées et pour chaque ID_Etudiant j'ai
    tous les modules et quand je fais GROUP BY Notes.ID_Etudiant tout est claire. Mais comme
    Nom et Prenom d' etudiant a seulement une entrée dans la table Etudiant je m' embrouille(je sens que le nombre d' enregistrements n' a aucune relation avec le resultat dans ce cas car
    Etudiant.ID=Notes.ID_Etudiant . je voudrais savoir en detaille qu' est-ce qui ce passe lors de la lancement de cette requête:

    [CODE] SELECT Etudiant.Nom, Etudiant.Prenom, AVG(Notes.Notes),Nom_Modules FROM Etudiant JOIN Notes ON (Etudiant.ID = Notes. ID_Etudiant) JOIN Modules ON (Notes.ID_Modules_1 = Modules.ID) GROUP BY Etudiant.Nom, Etudiant.Prenom, Modules.Nom_Modules; [CODE]
    ).
    Je sais pas GROUP BY traite la table créée par JOIN ou les tables passées en argument
    à JOIN?

  12. #12
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Reprenons

    => chaque combinaion nom-prénom correspond un ID_etudiant

    Table Etudiant
    ---------------
    Etudiant(ID,Nom,Prenom,Addresse,Date_Naissance)

    Es-tu bien d'accord qu'à chaque combinaison [Nom-Prénom] correspond un ID spécifique?

    Etudiant.ID = Notes.ID_Etudiant
    C'est d'ailleurs ce qui te permet de relier tes deux tables (=clé étrangère)
    Donc regrouper par Notes.ID_Etudiant revient au même que par Etudiant.ID ou que par Etudiant.[Nom-Prenom]


    Table Notes
    -------------
    Notes(ID, ID_Etudiant, ID_Formation, ID_Modules_1, Notes, Modules)

    Plusieurs fois le même ID_Etudiant avec toute une série de notes pour chaque ID_Etudiant




    GROUP BY traite les tables utilisées

    donc

    GROUP BY Etudiant.Nom, Etudiant.Prenom, Modules.Nom_Modules

    s'applique sur les tables Etudiant et Modules et va regrouper Nom-Prenom-Modules et donc faire les moyennes pour tous les groupes Nom-Prenom-Modules possibles. Ce qui est ce que tu veux

    Explication pour cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Etudiant.Nom, Etudiant.Prenom, AVG(Notes.Notes),Nom_Modules FROM Etudiant JOIN Notes ON (Etudiant.ID = Notes. ID_Etudiant) JOIN Modules ON (Notes.ID_Modules_1 = Modules.ID) GROUP BY Etudiant.Nom, Etudiant.Prenom, Modules.Nom_Modules;
    Fait les groupes
    GROUPE 1 =>| Momtselidze | Lida | Module_1 |
    GROUPE 2 =>| Momtselidze | Lida | Module_2 |
    GROUPE 3 =>| Momtselidze | Lida | Module_3 |

    Et calcule la moyenne des notes par groupe

    +---------------+--------+------------------+-------------+
    | Nom | Prenom | AVG(Notes.Notes) | Nom_Modules |
    +---------------+--------+------------------+-------------+
    | Momtselidze | Lida | 18.3333 | Module_1 |
    | Momtselidze | Lida | 17.0000 | Module_2 |
    | Momtselidze | Lida | 19.0000 | Module_3 |
    | Varcimashvili | Marie | 17.3333 | Module_1 |
    | Varcimashvili | Marie | 19.3333 | Module_2 |
    | Varcimashvili | Marie | 17.6667 | Module_3 |
    +---------------+--------+------------------+-------------+






    Jasmine,
    -- Jasmine --

  13. #13
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Bonjour Jasmine,
    maintenent tout est claire comme le jour.
    Merci beaucoup.
    J' espère d' avoir bientôt les nouveaux problemes et également j' espère de les resoudre avec toi.
    Dir la verité pour moi il est très intéressant et agréable d' avoir le contacte avec toi.
    Merci encore.




    Otar,

  14. #14
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Tant mieux si tout est maintenant clair.
    Tiens j'y pense...si ce n'est pas déjà fait, crée les clés étrangères afin de relier tes tables . Ca sera du travail plus propre


    Jasmine,
    -- Jasmine --

  15. #15
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Jasmine80
    Tant mieux si tout est maintenant clair.
    Tiens j'y pense...si ce n'est pas déjà fait, crée les clés étrangères afin de relier tes tables . Ca sera du travail plus propre


    Jasmine,
    Bonjour Jasmine,
    regarde s' il te plait comment j' ai créé mes tables et puis, si tu peux, dit moi si le raisonnement qui suit la création de tables est il correcte.

    CREATE TABLE Etudiant
    (ID INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    Prenom VARCHAR(20),
    Nom VARCHAR(20),
    Addresse VARCHAR(40),
    Date_Naissence DATE)
    type=INNODB;


    CREATE TABLE Modules
    (ID int(2) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    Nom_Modules VARCHAR(15))
    TYPE=INNODB;


    CREATE TABLE Formation
    (ID INT(3) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    Branches VARCHAR(30),
    ID_Modules INT(4),
    CONSTRAINT FOREIGN KEY FK_1(ID_Modules) REFERENCES Modules(ID))
    type=INNODB;


    CREATE TABLE Apprend
    (ID INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    ID_Etudiant INT(4),
    ID_Formation INT(4),
    CONSTRAINT FOREIGN KEY FK_2(ID_Etudiant) REFERENCES Etudiant(ID),
    CONSTRAINT FOREIGN KEY FK_3(ID_Formation) REFERENCES Formation(ID))
    type=INNODB;


    CREATE TABLE Notes
    (ID INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    ID_Etudiant INT(4),
    ID_Formation INT(3),
    ID_Modules_1 INT(4),
    Notes INT(4),
    CONSTRAINT FOREIGN KEY FK_4(ID_Etudiant) REFERENCES Etudiant(ID),
    CONSTRAINT FOREIGN KEY FK_5(ID_Formation) REFERENCES Formation(ID),
    CONSTRAINT FOREIGN KEY FK_6(ID_Modules_1) REFERENCES Modules(ID) )
    TYPE=INNODB;




    a) Un étudiant peut apprendre de 1 à N branches et une branche peut être apprise
    par 1 à N étudiant. Donc il faut créer une nouvelle table où sont immigrés les
    pk (primery key) de la table Etudiant et de la table Formation:

    Apprend ( ID, #ID_Etudiant, #ID_Formation )

    Peut être on pouvais aussi l' optimiser de la manière suivante:

    Apprend ( #ID_Etudiant, #ID_Formation )

    b) Une branche peut faire partie d' un seul module, tandis qu' un module peut impliquer de
    1 à N branches. Donc on immigre le pk de la table Modules dans la table Formation:

    Formation(ID,Branches,#ID_Modules )

    c) Un etudiant peut recevoir de 1 à N notes, tandis qu' une note peut être reçue par un seul
    étudiant. Donc dans la table Notes on immigre la clé primaire de la table Etudiant.

    Dans une formation on peut recevoir de 1 à N notes tandis qu' une note peut être reçue
    dans une seule formation. Donc dans la table Notes on immigre la clé primaire de la
    table Formation.

    Un module peut comprendre de 1 à N notes tandis qu' une note peut comprendre un seule
    module. Donc dans la table Notes on immigre la clé primaire de la table Modules.

    Et le resultat :

    Notes (ID, #ID_Etudiant, #ID_Formation , #ID_Modules_1, Notes)

    Pour resumer:

    Etudiant (ID,Prenom, Nom , Addresse, Date_Naissence )
    Modules(ID,Nom_Modules )
    Formation(ID,Branches,#ID_Modules ) /**immigration du pk de la table Modules**/
    Apprend ( ID, #ID_Etudiant, #ID_Formation ) /**créé **/
    Notes (ID, #ID_Etudiant, #ID_Formation , #ID_Modules_1, Notes) /**immigration

    de pk de la table Etudiant et de la table Formation**/

    Voila c' est ce que j' en pense Jasmine


    Otar,

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

Discussions similaires

  1. N'avez vous pas marre d'installer 10 000 trucs sur votre ordi
    Par Invité dans le forum La taverne du Club : Humour et divers
    Réponses: 14
    Dernier message: 03/12/2014, 18h08
  2. Pourquoi n'utilisez vous pas SAP BI
    Par Bill54 dans le forum Approche théorique du décisionnel
    Réponses: 38
    Dernier message: 04/12/2013, 16h24
  3. Réponses: 28
    Dernier message: 19/09/2008, 02h07

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