SELECT moyenne générale

Résolu
Bonjour,

Ce post fait suite a ma précédente question : https://forums.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

2 réponses

  1. Contributeur
    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
    1. Merci pour ta réponse
      Ce format me permet de calculer la moyenne d'un module. Hors je souhaite calculer la moyenne d'une matière qui comprend plusieurs module
    2. J'ai une table qui fait le lien entre l'id d'une matière, le nom du module et son coef
    3. 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
    4. Contributeur
      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
    5. 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
  2. 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 !