В этом проекте я пытаюсь создать запрос, который возвращает сумму баллов GPA студента в соответствии с его / ее оценками. Я использую MySQL 5.7.19 и данные хранятся следующим образом:
CourseID Grade
5 A
8 D-
4 B-
8 B+
2 A
Я использовал оператор CASE, чтобы преобразовать буквенные оценки в числа, и использовал функцию MAX в сочетании с GROUP BY, чтобы получить только более высокую оценку из курсов, пройденных более одного раза (в данном случае курс № 8) ...
SELECT MAX(
CASE WHEN Grade = 'A+' OR Grade = 'A' THEN 4
WHEN Grade = 'A-' THEN 3.67
WHEN Grade = 'B+' THEN 3.33
WHEN Grade = 'B' THEN 3
WHEN Grade = 'B-' THEN 2.67
WHEN Grade = 'C+' THEN 2.33
WHEN Grade = 'C' THEN 2
WHEN Grade = 'C-' THEN 1.67
WHEN Grade = 'D+' THEN 1.33
WHEN Grade = 'D' THEN 1
WHEN Grade = 'D-' THEN 0.67
ELSE 0 END) AS Grade
FROM courses_taken WHERE Grade IS NOT NULL AND Grade != 'W'
GROUP BY CourseID
Это прекрасно работает, я получаю следующие результаты:
Grade
4.00
2.67
3.33
4.00
Но мне нужно получить сумму этих значений, и когда я пытаюсь использовать функцию SUM, я получаю ошибку:
SELECT SUM(MAX(
CASE WHEN Grade = 'A+' OR Grade = 'A' THEN 4
WHEN Grade = 'A-' THEN 3.67
WHEN Grade = 'B+' THEN 3.33
WHEN Grade = 'B' THEN 3
WHEN Grade = 'B-' THEN 2.67
WHEN Grade = 'C+' THEN 2.33
WHEN Grade = 'C' THEN 2
WHEN Grade = 'C-' THEN 1.67
WHEN Grade = 'D+' THEN 1.33
WHEN Grade = 'D' THEN 1
WHEN Grade = 'D-' THEN 0.67
ELSE 0 END)) AS Total
FROM courses_taken WHERE Grade IS NOT NULL AND Grade != 'W'
GROUP BY CourseID
ОШИБКА 1111 (HY000): недопустимое использование групповой функции
Я попытался удалить предложение GROUP BY, но получил ту же ошибку. Я также удалил MAX и GROUP BY, это сработало, однако я получил общее количество всех оценок, а это не то, что я хочу. Мне было интересно, что именно я делаю не так или есть ли другой способ сделать это.
Спасибо.