2011-03-09 52 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