Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
917 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème requête ACCESS

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème requête ACCESS

n°1948843
clements42
Posté le 09-12-2009 à 20:50:32  profilanswer
 

bonsoir,
 
dans un cadre scolaire, je dois développer une appli permettant, entre autre, de calculer des moyennes à partir de notes
 
http://nsa11.casimages.com/img/2009/12/09/mini_091209084527523125.png
 
je souhaite faire 2 choses :  
 
calculer les moyennes par élève, dans chaque matière
calculer les moyennes de chaque classe, dans chaque matière
 
concernant la première, j'y arrive avec la requête suivante:
 

Code :
  1. SELECT (SUM(valeur_note * coeff_note) / SUM(coeff_note)) As Moyenne, nom_matiere
  2. FROM NOTES N, DEVOIR D, COURS C
  3. WHERE N.login_eleve = un_user
  4. AND N.id_devoir = D.id_devoir
  5. AND D.id_cours = C.id_cours
  6. group by nom_matiere;


Pour la seconde en revanche, impossible d'y parvenir. Pourtant, ça me parait tout bête, puisque j'arrive à calculer les moyennes individuelles. Je pensais juste faire la somme de celles-ci, divisées par le nombre d'élève dans la classe, par exemple (il y a peut être d'autres solutions).
 
Merci d'avance à ceux qui tenteront de m'aider...

mood
Publicité
Posté le 09-12-2009 à 20:50:32  profilanswer
 

n°1948862
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 09-12-2009 à 22:19:48  profilanswer
 

1) dans le modèle que tu fournis, l'entité Matière ne sert à rien. dans un cours, on enseigne une matière et une seule, pas 36. c'est donc une relation (1,1) pour laquelle une clé étrangère est inutile

 

2) choisir ce qui est manifestement un type alphanumérique comme clé primaire c'est vraiment pas génial, ça devrait même être interdit (tables matière et classe)

 

3) les jointures, on les fait par INNER JOIN, pas par WHERE. si c'est ton prof qui t'a dit de faire comme ça, alors signale le au rectorat et balance le au bucher.

 

4) ta requête est pas mal, mais si tu veux calculer la moyenne par élève, alors tu devras la lancer autant de fois que tu as d'élèves ce qui là encore n'est pas top.
tu dois la modifier pour que ton recordset ressemble à ceci :

 


Eleve       Matière      Moyenne
xxx          xxx           xxx

 

un exemple pour les élèves TOTO, TUTU et TATA pour les matières HISTOIRE et MATHS :

 


Eleve       Matière      Moyenne
TOTO      HISTOIRE    12
TOTO      MATHS        5
TATA      HISTOIRE     4
TATA      MATHS        15
TUTU      HISTOIRE     3
TUTU      MATHS        14.5


si tu arrives à faire ressembler ta 1ere requête à ça, alors la seconde te tombera sous le sens.

 

bon courage


Message édité par Harkonnen le 09-12-2009 à 22:51:06

---------------
J'ai un string dans l'array (Paris Hilton)
n°1949040
clements42
Posté le 10-12-2009 à 14:37:50  profilanswer
 

Salut,
 
Merci pour ta réponse.
 
Je parviens à obtenir le résultat que tu indiques pour la 1è requête, grâce à celle-ci :
 

Code :
  1. SELECT login_eleve, nom_matiere, (SUM(valeur_note * coeff_note) / SUM(coeff_note)) As Moyenne
  2. FROM NOTES N, DEVOIR D, COURS C
  3. WHERE  C.nom_classe = 'nom_d_une_classe'
  4. AND N.id_devoir = D.id_devoir
  5. AND D.id_cours = C.id_cours
  6. GROUP BY nom_matiere, login_eleve;


 
qui me renvoie :


Eleve   Matière      Moyenne
 
TOTO   Maths          12
TOTO   Français       10.54
TOTO   Economie       1.8
TATA   Maths          14.2
TATA   Maths          10.7
TATA   Economie       11.1


 
En revanche, la 2è requête ne me saute pas aux yeux pour reprendre ton expression  :whistle:  
 
J'avais pensé à un truc comme ça
 

Code :
  1. SELECT nom_classe, nom_matiere, (SUM(valeur_note * coeff_note) / SUM(coeff_note)) As Moyenne
  2. FROM NOTES N, DEVOIR D, COURS C
  3. WHERE  C.nom_classe = 'nom_d_une_classe'
  4. AND N.id_devoir = D.id_devoir
  5. AND D.id_cours = C.id_cours
  6. GROUP BY nom_classe, nom_matiere;


 
Ça me renvoie des résultats presque cohérents, sauf si un élève a moins de notes qu'un autre, je m'explique.
 
en maths, toto a eu 17 au DS1 (coeff 2) et 11 au DS2 (coeff 1)
en maths, tata a eu 10 au DS1 (coeff 2 donc), mais aucune au DS2
 
toto a une moyenne de 45/3 = 15
tata a une moyenne de 20/2 = 10
 
la moyenne de classe doit donc être de (10+15)/2= 12.5
 
Or, avec la requête ci dessus, ça ne différencie pas les élèves: Ca va faire (17*2 + 11*1 + 10*2) / (2+1+2) = 13
 
Ça ne fait donc pas "une moyenne des moyennes", mais une moyenne de toute les notes.
 
En espérant m'être fait comprendre...
 
Merci


Message édité par clements42 le 10-12-2009 à 14:39:28

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème requête ACCESS

 

Sujets relatifs
[VBA Access] Problème de requête[ACCESS] Problème requête et valeur par défaut
[Resolu][C#, ASP.net / access] problème requete updateProbleme Requete Access
sql access probleme de requeteProblème de requête d'insertion IIS/Access/ASP
[Access] Petit problème de requete[SQL/Access] problème pour une requête en apparence assez simple
[Access]Problème de requete dans un formulaireAsp, Vb et Access, Problème requête! A l'aide
Plus de sujets relatifs à : Problème requête ACCESS


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR