Ваш запрос не выполнен, поскольку в выражении case
(grade
) имеется неагрегированный столбец, который не принадлежит предложению group by
. В большинстве баз данных это фатальная ошибка - хотя MySQL слабо относится к этому, что может привести к удивительному поведению.
Скорее всего, вы хотите:
SELECT
s.first_name,
AVG(ISNULL(p.grade, 0)) AS average,
CASE WHEN AVG(ISNULL(p.grade, 0)) < 75 THEN 'failing' ELSE 'passing' END result
FROM students s
LEFT JOIN papers p ON p.student_Id = s.id
GROUP BY s.id, s.first_name
ORDER BY average DESC
Это устанавливает result
в соответствии со средним значением grade
каждого student
.
Обратите внимание, что я добавил псевдонимы таблиц в ваш запрос и добавил к каждому столбцу префикс таблицы, к которой он принадлежит; это делает запрос более легким для чтения и записи, и однозначно относится к базовой структуре таблиц.
Примечание: я довольно подозрительно отношусь к конструкции ISNULL()
в статистической функции AVG()
; AVG()
игнорируйте значения NULL
s, поэтому ваше выражение заставляет учащихся без оценок получить среднее значение 0
вместо NULL
- что может не соответствовать вашим ожиданиям.