Partage
  • Partager sur Facebook
  • Partager sur Twitter

Modifier des champs dans ma base de données SQL

Sujet résolu
    18 juillet 2011 à 14:05:54

    Bonjour,

    J'ai un travail pour l'université à faire et il y a une question que je ne suis pas trop certain de comment faire pour la résoudre. Je vous explique le problème:

    Question: Générer la commande pour faire la mise à jour du champ nombreCreditAcquis de la table Etudiant_Programme. Vous devez calculer ce champ à partir des cours que l'étudiant a pris dans le programme.


    Voici mes tables MySQL:

    Etudiant_Programme : (idEtudiant int, idProgramme int, dateDebut date, dateFin date, nombreCreditsAcquis int, moyenne float, statu varchar)

    Cours_Etudiant: ( idEtudiant int, idProgramme int, idGroup int, sigleCours varchar, noteFinal float, statu varchar, an year, trimestre varchar)


    Cours: (sigleCours varchar, nomCours varchar, codeDepartement varchar, idEmploye int, nombreCredits int)


    Je crois qu'avec ces 3 tables, il y en a assez pour répondre à la question, mais je ne sais pas comment faire pour calculer le tout.

    Je comprends que je dois faire un lien entre la table Cours et la table Cours_Etudiant afin de savoir combien de crédit total chaque étudiant a réussi mais je ne comprends pas trop comment m'y prendre.

    J'ai réussi à calculer le nombre de crédit total réussi pour tous les étudiants ensemble mais je ne comprends pas comment faire pour sélectionner que les crédits réussi pour chacun des étudiants individuellement.

    Merci beaucoup!






    • Partager sur Facebook
    • Partager sur Twitter
      18 juillet 2011 à 14:20:28

      Bonjour,

      On suppose qu'on obtient les crédits d'une matière si seulement on a au moins une note supérieure ou égale à 10 à cette matière ?

      Comme tu as l'air d'avoir déjà trouvé la sous-requête qui répond en partie au problème, peux-tu la poster pour voir ce que tu as fait ?

      As-tu commencé à rédiger la requête finale ? (ne t'attends pas à ce qu'on te ponde une requête toute prête, c'est pas encore Noël :) )
      • Partager sur Facebook
      • Partager sur Twitter
        18 juillet 2011 à 14:33:50

        Bonjour BlueRat,

        Premièrement, merci pour ta réponse rapide.
        Deuxièmement, comme c'est un travail d'université et que je veux faire le travail par moi-même, je ne veux pas avoir la réponse à la question toute faite mais plutôt une piste de solution.

        Je ne suis pas à la maison présentement, mais au travail. Je n'ai donc pas accès à ma requête pour l'instant. Cependant, pour avoir la note de passage, il faut avoir la mention 'A' dans le champs "Statu" de la table Etudiant_Programme.

        Je suppose qu'il faudra probablement faire une jointure entre les tables mais je ne sais pas trop comment m'y prendre.

        Merci encore!

        • Partager sur Facebook
        • Partager sur Twitter
          18 juillet 2011 à 14:59:31

          Commence par faire une requête SELECT qui donne la valeur de nombreCreditsAcquis pour chaque idEtudiant (un simple GROUP BY suffira).

          Ensuite tu fais UPDATE etudiants JOIN (sous-requête) USING (idEtudiant) SET ...
          • Partager sur Facebook
          • Partager sur Twitter
            18 juillet 2011 à 17:06:56

            Salut,

            Voici ce que j'ai présentement:

            SELECT Etudiant_Programme.idEtudiant, nombreCreditsAcquis
            FROM Etudiant_Programme, Cours, Cours_Etudiant
            WHERE Etudiant_Programme.idEtudiant = Cours_Etudiant.idEtudiant
            AND Etudiant_Programme.Statu ="A"
            GROUPBY Etudiant_Programme.idEtudiant

            Le résultat me donne donc:





            idEtudiant nombreCreditsAcquis
            684209 0
            754391 0
            888976 0
            906388 0


            Il ne me reste donc qu'à calculer le nombre de crédit pour chaque cours réussi par étudiant.
            • Partager sur Facebook
            • Partager sur Twitter
              18 juillet 2011 à 17:10:05

              Tu aurais pu le mettre directement XD
              • Partager sur Facebook
              • Partager sur Twitter
                18 juillet 2011 à 17:11:57

                Salut Lors Casque Noir,

                J'aimerais bien mais c'est une question de mon travail :lol: .

                Supposant qu'il n'y a pas que 4 étudiants dans l'Université, comment faire pour automatisé le tout.

                Je crois n'être pas trop loin, il manque juste une fonction dans mon WHERE qui me permet d'additionner tous les cours réussi pour chaque étudiant et d'aller l'insérer dans ma table.

                Merci encore une fois!
                • Partager sur Facebook
                • Partager sur Twitter
                  18 juillet 2011 à 17:31:19

                  Si on reprend la structure des tables :

                  Cours: (sigleCours varchar, nomCours varchar, codeDepartement varchar, idEmploye int, nombreCredits int)

                  Etudiant_Programme : (idEtudiant int, idProgramme int, dateDebut date, dateFin date, nombreCreditsAcquis int, moyenne float, statu varchar)

                  Cours_Etudiant: ( idEtudiant int, idProgramme int, idGroup int, sigleCours varchar, noteFinal float, statu varchar, an year, trimestre varchar)

                  J'ai un gros doute sur les relations, Cours_Etudiant c'est une relation entre 4 tables ? C'est quoi un programme ? Enfin ça mériterait des explications un peu plus claires tout ça !

                  sinon essaie ça :

                  SELECT ep.idEtudiant, count(ce.idEtudiant) AS nombreCreditsAcquis
                  FROM Etudiant_Programme ep
                  LEFT JOIN Cours_Etudiant ce ON (ce.idEtudiant = ep.idEtudiant AND ep.Statu ='A')
                  GROUP BY ep.idEtudiant
                  


                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 juillet 2011 à 17:45:24

                    Bonjour,

                    ce n'est pas la bonne formule. J'obtiens comme résultat:

                    idEtudiant nombreCreditsAcquis
                    684209 0
                    754391 0
                    888976 32
                    906388 10


                    Je ne peux pas vraiment le compter à la main car il y a beaucoup de cours complété dans ma table­. Je supose qu'il devrait y avoir au moins une 50e de crédits pour chaque étudiant.

                    En passant, ce n'est pas chaque cours qui a le même nombre de crédit. Il faut donc aller chercher la valeur de nombreCredits dans la table Cours et faire une sommation de tous les crédits réussi (note "A") pour chaque étudiant.

                    Merci






                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 juillet 2011 à 15:23:38

                      Explique les relations entre tes tables, et donne plus d'infos.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 juillet 2011 à 16:44:45

                        Bonjour,

                        Je vais décrire quelques une de mes tables avec des données. Je vais les abrégées parce que j'ai environ 50-200 données par tables. Je vais prendre des données au hasard dans mes tables.

                        Table Cours:
                        sigleCours nomCours codeDepartement idEmploye nombreCredits
                        INF2003 Introduction à l'ingénierie informatique GINF 123987 6
                        INF2004 Systèmes information dans les entreprises GINF 325642 6
                        INF2041 Projet de fin d'études GINF 123987 15
                        LOG2125 Analyse et conception de logiciels GLOG 310444 7
                        MED2801 Génétique MEDE 291432 6


                        Table Cours_Etudiant:

                        idEtudiant idProgramme idGroupe sigleCours noteFinal statu an trimestre
                        684209 1300 1 INF2005 3.6 A 2007 A
                        684209 1300 1 INF2009 3.4 A 2007 A
                        684209 1300 1 INF2011 3.3 A 2007 A
                        754391 1300 1 INF2003 3.8 A 2008 H
                        754391 1100 1 LOG2031 3.5 A 2010 H


                        Table Etudiant_Programme: (La case statu ici ne sert à rien... Elle représente seulement Actif, terminé et retiré. Lorsque toujours actif, il a également la dateFin à NULL...)

                        idEtudiant idProgramme dateDebut dateFin nombreCreditsAcquis moyenne statu
                        684209 1300 2007-01-09 2010-12-21 0 3.25 T
                        754391 1100 2008-01-09 NULL 0 3 R
                        888976 1100 2007-01-09 2010-12-21 0 3.6 T
                        888976 2100 2009-01-01 NULL 0 3.45 A
                        906388 1800 2008-11-01 NULL 0 2.2 A


                        Il faut donc faire un lien entre la table Cours et Cours_Etudiant avec de compter le nombreCredits par cours. Il faut également faire un lien entre la table Cours_Etudiant et Etudiant_Programme afin de comptabiliser le nombreCreditsAcquis total pour chaque étudiant.

                        Je crois être un peu plus clair dans ma demande :)

                        Merci beaucoup!, encore une fois héhé

                        EDIT: Comme je ne peux pas poster 2 fois en ligne en 24 heures, je vais faire un petit update.

                        Je m'approche de la réponse mais je n'y suis pas tout à faire.

                        Voici ma requête:

                        SELECT ep.idEtudiant, count(co.nombreCredits) AS nombreCreditsAcquis
                        FROM Etudiant_Programme ep
                        LEFT JOIN Cours_Etudiant ce ON (ce.idEtudiant = ep.idEtudiant AND ce.Statu ='A')
                        LEFT JOIN Cours co ON (co.sigleCours = ce.sigleCours)
                        GROUP BY ep.idEtudiant
                        


                        J'obtiens comme résultat:

                        idEtudiant nombreCreditsAcquis
                        684209 16
                        754391 11
                        888976 64
                        906388 7


                        Pour les étudiants 684209, 754391 et 906388, ils ont réussi respectivement 16, 11 et 7 cours et l'étudiant 888976 a réussi 32 cours (64 / 2 ?).
                        Je ne comprends pas pourquoi il affiche mon nombre de cours réussi plutôt que de me donner le nombreCredits pour chaque cours.

                        Merci!
                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 juillet 2011 à 17:46:11

                          Bonjour,

                          J'ai éditer mon message précédent.

                          Je suis près de la réponse, il ne manque qu'une petite partie à ma requête:)

                          Merci
                          • Partager sur Facebook
                          • Partager sur Twitter
                            21 juillet 2011 à 16:08:15

                            Ne serait-ce pas un ...
                            SUM(co.nombreCredits) AS nombreCreditsAcquis
                            


                            ...que tu chercherais à obtenir ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 juillet 2011 à 17:00:27

                              Merci !!!!!

                              Je savais que s'était juste une petite erreur stupide.

                              La requête s'agit est en fait:

                              SELECT ep.idEtudiant, SUM(co.nombreCredits) AS nombreCreditsAcquis
                              FROM Etudiant_Programme ep
                              LEFT JOIN Cours_Etudiant ce ON (ce.idEtudiant = ep.idEtudiant AND ce.Statu ='A')
                              LEFT JOIN Cours co ON (co.sigleCours = ce.sigleCours)
                              GROUP BY ep.idEtudiant
                              


                              Merci infiniment !
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Modifier des champs dans ma base de données SQL

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown