Mysql 将case语句相乘

Mysql 将case语句相乘,mysql,select,case,Mysql,Select,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 '

我想用一个案例来说明一个学生的平均成绩。当我使用案例陈述时,当学分与实际分数相乘时,我只得到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。我是否需要执行子查询以使用
案例等级
列?

如果您试图用字符串(等级)乘以一个数字(学分),这就是为什么结果为零,请尝试将查询更改为:

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;

这是有道理的。尝试将字符串与数字相乘。谢谢你的帮助。非常感谢!我会在可能的时候接受答案