Попытка использовать ORDER BY со средними значениями - PullRequest
1 голос
/ 09 марта 2011

Мне нужно отсортировать значения из таблицы SQL по средним значениям определенных значений.

Моя таблица «Экзамены» выглядит так:

+------------+------------+------+
| 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

Правильный ли мой подход, или там скрывается ошибка? Как я смогу обрабатывать значения NULL в столбце Точки?

Ответы [ 2 ]

5 голосов
/ 09 марта 2011

У вас есть 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 голосов
/ 09 марта 2011

Агрегирующим функциям, таким как среднее значение, требуется другой столбец, содержащий результат агрегирующей функции в сочетании с GROUP BY.

Так что попробуйте:

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