Bonjour/bonsoir à tous,
Dans le cadre d'un TP, je dois écrire une fonction en PL/SQL afin de récupérer le rang d'un étudiant dans sa promotions (en fonction de sa moyenne générale à un semestre).
Voici ma base de données :
PROMOTIONS (idPromotion, nomPromotion, nbEtudiantsPromotion)
GROUPES (idGroupe, idPromotion#)
ETUDIANTS (idEtudiant, nomEtudiant, prenomEtudiant, sexeEtudiant, dateNaissanceEtudiant, idGroupe#)
SEMESTRES (idSemestre, dateDebutSemestre, dateFinSemestre, idPromotion#)
MODULES (idModule, nomModule, idSemestre#, coefficientModule)
MATIERES (idMatiere, nomMatiere, idModule#, coefficientMatiere)
NOTES (idEtudiant#, idMatiere#, note)
J'ai également accès à cette fonction précédemment écrite qui me permet de récupérer la moyenne d'un étudiant à un semestre donné (s'il y est inscrit, of course)
moyenneEtudiantSemestre (p_idEtudiant IN Etudiants.idEtudiant%TYPE, p_idSemestre IN Semestres.idSemestre%TYPE)
La signature de la fonction que je dois écrire est la suivante :
classementEtudiantSemestre(p_idEtudiant IN Etudiants.idEtudiant%TYPE, p_idSemestre IN Semestres.idSemestre%TYPE)
Donc en résumé: ma fonction prend en paramètre un identifiant unique de Etudiants ainsi qu'un identifiant unique de Semestres (auquel il serait inscrit).
Grâce à la fonction moyenneEtudiantSemestre (qui prend les mêmes paramètres), j'ai donc accès à la moyenne générale de tous les étudiants d'un semestre donné.
Je me doute donc que je vais devoir utiliser cette méthode pour établir une sorte de classement pour enfin sortir le rang d'un étudiant donné.
Seulement voilà, je ne sais pas comment m'y prendre. J'ai pensé à utiliser un curseur pour parcourir les étudiants et utiliser un compteur pour enregistrer la position jusqu'à voir le bon étudiant (j'ai a peu près l'idée dans ma tête) mais le sujet stipule : Il est à noter qu’il faut écrire cette fonction de façon extrêmement simple sans utiliser un curseur !
Et la je suis perdu. Je ne vois absolument pas comment faire une requête extrêmement simple pour obtenir ce résultat.
En revanche, deux étudiants ayant une même moyenne G doivent avoir le même rang, donc je soupçonne un DISTINCT quelque part (merci Sherlock me direz vous).
Voilà, désolé pour le pavé, je ne vous demande pas nécessairement de me mâcher du code mais au moins une petite indiction / conseil / piste de réflexions sachant que j'ai déjà regardé 10 tonnes de sujet du style sur Internet.
Merci par avance,
Partager