乘以case语句mysql

时间:2014-11-16 05:54:56

标签: mysql select case

我试图使用案例陈述来获得学生的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列?

1 个答案:

答案 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;