Adloun

La moyenne pondérée, et deux façons de la rater

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 21 — Bases de données relationnelles et SQL

Énoncé

Chaque matière a un coefficient. Écrire la moyenne pondérée de chaque élève. Que valent, à côté, AVG(n.valeur) et AVG(n.valeur * m.coef) ?

Corrigé

La moyenne pondérée est , et elle s'écrit avec deux sommes :


SELECT e.nom,
       SUM(n.valeur * m.coef) * 1.0 / SUM(m.coef) AS ponderee
FROM Eleve e JOIN Note n ON n.eleve = e.id
             JOIN Matiere m ON m.code = n.matiere
GROUP BY e.id, e.nom;
nompondérée`AVG(valeur)``AVG(valeur*coef)`
Alaoui
Benali
Cohen

Tous ces nombres sont mesurés. Trois observations.

1. AVG(n.valeur) est la moyenne simple, et elle est différente : contre pour Alaoui. La pondération l'a fait baisser, puisque son pèse un coefficient et son un coefficient . La moyenne simple n'est pas « approximativement » la pondérée : elle répond à une autre question.

*2. AVG(n.valeur </em> m.coef) n'a aucun sens. Elle vaut pour Alaoui — une note sur ne vaut pas . Elle calcule , en divisant par le nombre de notes au lieu de la somme des coefficients. Une fonction d'agrégation divise toujours par le nombre de lignes ; si le dénominateur voulu est autre chose, il faut l'écrire.** C'est pourquoi une moyenne pondérée s'écrit avec deux SUM et jamais avec un AVG.

*3. Le </em> 1.0 n'est pas décoratif.** Sans lui, est une division entière et rend au lieu de . Mesuré sur la moyenne générale : SUM(valeur)/COUNT(*) rend , là où AVG(valeur) rend .

C'est très exactement le piège de l'exercice 1.1 : double b = 7 / 2; vaut parce que la division est faite avant la conversion. Le programme dit ici « on passe outre les subtilités liées à la division entière ou flottante » — ce qui autorise à ne pas les théoriser, pas à s'y laisser prendre. Deux entiers divisés donnent un entier, dans tous les langages de ce livre.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.