【发布时间】:2019-06-10 12:24:28
【问题描述】:
在这个项目中,我试图创建一个查询,根据他/她的成绩返回大学生的 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
ERROR 1111 (HY000):组函数使用无效
我尝试删除 GROUP BY 子句,但我得到了同样的错误。我还删除了 MAX 和 GROUP BY,它起作用了,但是,我得到了所有成绩的总和,这不是我想要的。我想知道我到底做错了什么,或者是否有其他方法可以做到这一点。
谢谢。
【问题讨论】: