我试图使用案例陈述来获得学生的gpa。当我使用case语句时,我只得到0作为解决方案,将学分与实际成绩相乘。我真的很困惑我做错了什么。
select *, sum(c.credits * grade), sum(c.credits),
CASE grade
WHEN 'A' THEN 4.0
WHEN 'A-' THEN 3.67
WHEN 'B+' THEN 3.33
WHEN 'B' THEN 3
WHEN 'B-' THEN 2.67
WHEN 'C+' THEN 2.33
WHEN 'C' THEN 2
WHEN 'C-' THEN 1.67
WHEN 'D+' THEN 1.33
WHEN 'D' THEN 1
WHEN 'D-' THEN 0.67
ELSE 0
END
from takes t join course c on t.course_id = c.course_id
group by t.ID;
我会显示一列CASE grade
,其中包含有人获得的字母等级的正确gpa。我是否需要使用子查询来使用CASE grade
列?
答案 0 :(得分:1)
您正在尝试使用字符串(成绩)多个(信用),这就是为什么您的结果为零,请尝试将查询更改为:
SELECT
t.ID,
sum(
c.credits * (
CASE grade
WHEN 'A' THEN 4.0
WHEN 'A-' THEN 3.67
WHEN 'B+' THEN 3.33
WHEN 'B' THEN 3
WHEN 'B-' THEN 2.67
WHEN 'C+' THEN 2.33
WHEN 'C' THEN 2
WHEN 'C-' THEN 1.67
WHEN 'D+' THEN 1.33
WHEN 'D' THEN 1
WHEN 'D-' THEN 0.67
ELSE 0
END
)
),
sum(c.credits)
FROM
takes t
INNER JOIN course c ON
t.course_id = c.course_id
GROUP BY
t.ID;