2011-03-09 51 views
1

我需要根据某些值的平均值对SQL表中的值进行排序。尝试将ORDER BY用于平均值

我的“考试”表看起来像这样:

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

下面是我尝试查询:

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

我的目的是让学生的学生证最高平均评级,在这种情况下,3

我的方法是否正确,或者是否存在潜在的错误?我将如何处理Points列中的NULL值?

回答

5

你有2种选择:

不要指望NULL的:

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

假设NULL是一个数字(在这种情况下,0):

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

与平均值等聚合函数结合使用时,需要包含聚合函数结果的另一列,其中包含GROUP BY

所以尝试:

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

你有关于如何处理NULL的想法吗? – Enthusiast 2011-03-09 14:56:15