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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème de requête de calculs de moyennes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de requête de calculs de moyennes

n°1993759
clements42
Posté le 17-05-2010 à 16:20:46  profilanswer
 

Bonjour,
 
Dans un cadre scolaire, je dois réaliser une appli qui calcule des moyennes de notes de classes.
Je parviens à obtenir toutes les moyennes des élèves d'une classe par matière avec :
 

Code :
  1. SELECT  (SUM(valeur_note * coeff_devoir) / SUM(coeff_devoir)) As Moyenne , nom_matiere
  2. FROM NOTES N, DEVOIR D, COURS C
  3. WHERE C.nom_classe='blablabla'
  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 un truc sous la forme :
 
12.65 | Français
13.70 | Français
6.76 | Français
13.16 | Maths
10.54 | Maths
8.65 | Maths
 
Chaque ligne correspondant donc à la moyenne d'un élève dans la dite matière.
 
Maintenant, je souhaite donc obtenir les moyennes minimales par matière (de l'élève le plus mauvais, donc). J'ai essayé en ajoutant un (MIN) devant (SUM(valeur_note * coeff_devoir) / SUM(coeff_devoir))  dans le sélect, malheureusement cela ne fonctionne pas. Access me balance qu'il est impossible d'avoir une fonction d'agrégat dans l'expression MIN((SUM(valeur_note * coeff_devoir) / SUM(coeff_devoir))
 
Voici mes tables > http://nsa15.casimages.com/img/201 [...] 143029.png
 
merci à ceux qui m'aideront !

Message cité 1 fois
Message édité par clements42 le 17-05-2010 à 16:21:49
mood
Publicité
Posté le 17-05-2010 à 16:20:46  profilanswer
 

n°1993787
olivthill
Posté le 17-05-2010 à 17:04:45  profilanswer
 

Oui, il faudrait utiliser une sous-requête.
Essayez ceci :

Code :
  1. SELECT
  2.        MIN(Moyenne) 'Min_Moyenne',
  3.   FROM
  4.    (SELECT  (SUM(valeur_note * coeff_devoir) / SUM(coeff_devoir)) As Moyenne , nom_matiere
  5.       FROM NOTES N, DEVOIR D, COURS C
  6.      WHERE C.nom_classe='blablabla'
  7.        AND N.id_devoir = D.id_devoir
  8.        AND D.id_cours = C.id_cours
  9.      GROUP BY nom_matiere, login_eleve) temp;

n°1993793
E-Nyar
I ain't no nice guy after all
Posté le 17-05-2010 à 17:09:05  profilanswer
 

Enregistrer le résultat du SQL sous forme de Requêtes dans Access permet ensuite de les attaquer comme des tables, c'est le seul moyen simple d'utiliser des "sous-requêtes" dans Access.


---------------
Don't fuck me, I'm anonymous.
n°1993816
rufo
Pas me confondre avec Lycos!
Posté le 17-05-2010 à 17:43:38  profilanswer
 

dans ton SGBD, y'a pas la fonction AVG() pour calculer une moyenne :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1993869
clements42
Posté le 17-05-2010 à 20:18:36  profilanswer
 

Merci à vous, ça marche avec la sous requête.
 

rufo a écrit :

dans ton SGBD, y'a pas la fonction AVG() pour calculer une moyenne :??:


J'ai des coefficients à appliquer aux moyennes ;)

n°1993946
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-05-2010 à 09:48:30  profilanswer
 

clements42 a écrit :

Bonjour,

 

Dans un cadre scolaire, je dois réaliser une appli qui calcule des moyennes de notes de classes.
Je parviens à obtenir toutes les moyennes des élèves d'une classe par matière avec :

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



Salut,

 

Je suis un peu hors sujet, mais il y a un truc important que tu dois savoir : la méthode que tu utilises pour faire tes jointures est dépassée et source d'erreurs potentiellement graves. En effet, les jointures (1) et (2) sont réalisées par WHERE, ce qui peut s'avérer dangereux pour tout un tas de raisons. Cette méthode est dépassée, et sémantiquement incorrecte en plus d'être dangereuse (un WHERE sert à restreindre le jeu d'enregistrements, pas à l'étendre comme le fait la jointure). La meilleure façon de réaliser des jointures consiste à utiliser la syntaxe JOIN (INNER, LEFT ou RIGHT selon le type de jointure souhaité). Cette syntaxe est normalisée, et élimine toute suppression malencontreuse d'un WHERE. Ainsi, ta requête pourrait se réécrire comme ceci :

Code :
  1. SELECT  (SUM(valeur_note * coeff_devoir) / SUM(coeff_devoir)) As Moyenne , nom_matiere
  2. FROM NOTES N INNER JOIN DEVOIR D ON N.id_devoir = D.id_devoir
  3.              INNER JOIN COURS C ON D.id_cours = C.id_cours
  4. WHERE C.nom_classe='blablabla'
  5. GROUP BY nom_matiere, login_eleve


En plus d'être plus lisible en permettant de bien mettre en évidence la partie jointure de la partie filtre, cette requête est bien plus sécurisée.
Je t'invite à lire tous les risques encourus par les jointures WHERE à partir d'ici : http://forum.hardware.fr/hfr/Progr [...] m#t1945827
Ou encore ici : http://forum.hardware.fr/forum2.ph [...] 0#t1963259

 

C'était le quart d'heure intégriste :D

Message cité 1 fois
Message édité par Harkonnen le 18-05-2010 à 09:49:27

---------------
J'ai un string dans l'array (Paris Hilton)
n°1996166
E-Nyar
I ain't no nice guy after all
Posté le 26-05-2010 à 12:24:47  profilanswer
 

Harkonnen a écrit :


.../...
 
C'était le quart d'heure intégriste :D


 
Intégriste vaut mieux que deux code-moi-ça :o


---------------
Don't fuck me, I'm anonymous.

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

  Problème de requête de calculs de moyennes

 

Sujets relatifs
Problème avec SlideToggle[Résolu] Problème variable php qui renvoie rien
[RESOLU] probleme d'espace et de point dans une rechercheProblème d'affichage diffèrent sur IE et Chrome
Problème lors du téléchargement d'une imageproblème à la compilation
Problème avec EasyphpRequete Access avec paramètres, éxécutée en VB .Net
[resolu] Probleme d'heritage des CSSProblème bizarre encodage caractère
Plus de sujets relatifs à : Problème de requête de calculs de moyennes


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