SELECT moyenne générale [Résolu]

Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
-
Bonjour,

Ce post fait suite a ma précédente question : https://www.commentcamarche.net/forum/affich-36156511-select-la-plus-petite-moyenne-d-un-table#p36156555

Pour récapituler ma situation :

J'ai une table avec l'id d'un élève, sa note, le nom du module et le coef de la note.
J'ai une seconde table qui fait le lien entre son module, la matière dans laquelle se trouve ce module et le coefficient du module
Ex : la matière Mécanique comporte le module Calcul de Structure coef 2 et Mécanique des solides coef 3. Et le module Calcul de Structure comporte plusieurs notes avec leur coeficient

Je sais calculer la moyenne d'un module :
SELECT SUM(note*coef)/ SUM(coef) as moyenne 
FROM bulletin
WHERE module = 'Calcul de Structure' AND id_etu = '1234'


J'aimerais calculer la moyenne de chaque matière pour un élève donné mais également la moyenne de la classe, la moyenne la plus basse, et la plus grande.


Merci d'avance pour l'aide que vous pourrez m'apporter

Configuration: Windows / Firefox 68.0
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
8296
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2019
412
1
Merci
bonjour, peut-être:
SELECT module, id_etu, SUM(note*coef)/ SUM(coef) as moyenne 
FROM bulletin
GROUP BY module, id_etu

et
SELECT module, SUM(note*coef)/ SUM(coef) as moyenne 
FROM bulletin
GROUP BY module

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 58271 internautes nous ont dit merci ce mois-ci

victorberson
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
2 -
J'ai une table qui fait le lien entre l'id d'une matière, le nom du module et son coef
victorberson
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
2 -
SELECT id_matiere, id_etu, SUM(moyenne * matiere_module.coef)/ SUM(matiere_module.coef) FROM matiere_module, (
SELECT module, id_etu, SUM(note*coef)/ SUM(coef) as moyenne
FROM bulletin
GROUP BY module, id_etu) as moyennes

J'essaie ceci mais je n'obtiens pas ce que je veux
yg_be
Messages postés
8296
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2019
412 -
peut-être
SELECT m.id_matiere, b.id_etu, 
SUM(b.note*b.coef * m.coef)/ SUM(b.coef *m.coef)  as moyenne 
FROM bulletin as b, matiere_module as m
WHERE b.module=m.module
GROUP BY m.id_matiere, b.id_etu
victorberson
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
2 -
C'est exactement ce que je venais de trouver !
Cependant, ceci me calcule donc la moyenne de la classe par matière(en rajoutant une condition au WHERE j'arrive à l'avoir pour une seule matière)
J'aimerai pouvoir calculer la plus petite de ces moyenne, et surtout la moyenne d'un elève en particulier
yg_be
Messages postés
8296
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2019
412 -
je ne pense pas que la suggestion en #6 calcule la moyenne de la classe par matière, elle calcule la moyenne de chaque étudiant pour chaque matière.
ne connais-tu pas la technique pour trouver la plus petite des moyennes?
Commenter la réponse de yg_be
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
2
0
Merci
Effectivement, j'avais mal compris certaine choses.
Cependant, je met ci-dessous les requetes finales qui fonctionnent : (si jamais d'autre en on besoin un jour)

Calcul de plus basse moyenne de la classe

SELECT min(moyenne)
FROM (
SELECT m.id_matiere, b.id_etu, SUM(b.note*b.coef * m.coef)/ SUM(b.coef *m.coef) as moyenne
FROM bulletin as b, matiere_module as m
WHERE b.module=m.nom_module AND id_matiere = '3'
GROUP BY m.id_matiere, b.id_etu) as moyennes


Calcul de la moyenne de la classe

SELECT id_matiere, SUM(moyenne * matiere_module.coef)/ SUM(matiere_module.coef) as moyenne
FROM matiere_module,
(
SELECT module, id_etu, SUM(note*coef)/ SUM(coef) as moyenne
FROM bulletin
GROUP BY module, id_etu
) as moyennes
WHERE nom_module = module AND id_matiere = '3'
GROUP BY id_matiere


Calcul de la moyenne d'un élève

SELECT m.id_matiere, b.id_etu, SUM(b.note*b.coef * m.coef)/ SUM(b.coef *m.coef) as moyenne
FROM bulletin as b, matiere_module as m
WHERE b.module=m.nom_module AND id_etu = '1234' AND id_matiere = '3'
GROUP BY m.id_matiere, b.id_etu


Merci encore pour ton aide !
Commenter la réponse de victorberson