【问题标题】:multiplying a case statement mysql乘以一个case语句mysql
【发布时间】:2015-01-13 06:41:32
【问题描述】:

我正在尝试使用案例陈述来获取学生的 gpa。当我使用案例陈述时,将学分与实际成绩相乘时,我只能得到 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 列?

【问题讨论】:

    标签: mysql select case


    【解决方案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;
    

    【讨论】:

    • 这是有道理的。试图将字符串与数字相乘。谢谢您的帮助。非常感激!当我可以的时候会接受答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    相关资源
    最近更新 更多