2011-03-09 6 views
1

J'ai besoin de trier les valeurs d'une table SQL en fonction des moyennes de certaines valeurs.Essayer d'utiliser ORDER BY avec des valeurs moyennes

Ma table « examens » ressemble à ceci:

+------------+------------+------+ 
| Exam  | Student_ID |Points| 
+------------+------------+------- 
| Math  |  3  | 20 |  
|Accounts I | 23  | NULL | 
|Statistics | 12  | 15 | 
|Accounts II |  3  | 21 | 
+------------+------------+------+ 

est ici la requête que j'ai essayé:

SELECT Student_ID FROM Exams GROUP BY Student_ID ORDER BY avg(POINTS) desc 

Mon but est d'obtenir l'ID étudiant de l'étudiant avec la moyenne la plus élevée note, dans ce cas, 3

Mon approche est-elle correcte ou y a-t-il une erreur? Comment serai-je capable de gérer les valeurs NULL dans la colonne Points?

Répondre

5

Vous avez 2 options:

Ne comptez pas NULL de:

SELECT Student_ID, AVG(Points) AS apoints 
FROM Exam 
WHERE Points IS NOT NULL 
GROUP BY Student_ID 
ORDER BY apoints DESC 

Supposons NULL est un certain nombre (dans ce cas 0):

SELECT Student_ID, AVG(COALESCE(Points,0)) AS apoints 
FROM Exam 
GROUP BY Student_ID 
ORDER BY apoints DESC 
0

Les fonctions agrégées telles que la moyenne nécessitent une autre colonne contenant le résultat de la fonction d'agrégation lorsqu'elle est combinée avec GROUP BY.

Essayez donc:

SELECT Student_ID, avg(POINTS) AS avg_points 
FROM Exams 
GROUP BY Student_ID 
ORDER BY avg_points desc 
+0

Avez-vous des idées sur la façon de faire face à NULL? – Enthusiast

Questions connexes