【问题标题】:How to temporarily change values in MySQL如何临时更改 MySQL 中的值
【发布时间】:2015-05-28 03:22:18
【问题描述】:

我有一个包含以下信息的表:ID、姓名、课程编号、学分、成绩,我需要计算每个学生的 GPA。查询应该很简单,但是成绩被存储为字母字符,所以我必须先转换它,然后才能进行任何添加。如何在不修改表中的值的情况下做到这一点?

答:4.0; A-:3.67; B+:3.33;乙:3; B-:2.67; C+:2.33; C: 2; C-:1.67; D+:1.33; D:1; D-:0.67; F:0

我应该指出,我拥有的包含该信息的表是一个子查询的结果,该子查询连接了 3 个名为 student、takes 和 course 的表,分别存储学生信息、成绩和课程信息。

这最终将被放入使用 JDBC 的 java 方法中

这是我尝试过的声明,我知道这是错误的,但我觉得它在正确的轨道上?

SELECT ID, name, (sum( case grade
                      WHEN 'A' THEN 4
                      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 .67
                      WHEN 'F' THEN 0)*credits)/sum(credits)) GPA

FROM (SELECT takes.ID, name, cid, grade, credits
      FROM student Natural Join takes Natural Join course) subQ
GROUP BY ID;

我也有这个解决方案,但我不确定在哪里可以插入 gpa#

SELECT takes.id, name, sum(credits * gpa#) / sum(credits) AS GPA
FROM takes NATURAL JOIN student NATURAL JOIN course
GROUP BY takes.ID

【问题讨论】:

    标签: mysql jdbc


    【解决方案1】:

    您的查询是正确的。我只是在group by 子句中添加了name,修改了数学并对其进行了一些格式化:

    SELECT 
      ID, 
      `name`, 
      sum(
        case grade
          WHEN 'A' THEN 4
          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 .67
          WHEN 'F' THEN 0
          ELSE 0
        end * credits
      ) / sum(credits) as GPA
    FROM 
    (
      SELECT takes.ID, name, cid, grade, credits
      FROM student 
      inner join takes 
      inner join course
    ) subQ
    GROUP BY 
      ID,
      `name`;
    

    试一试,看看效果如何。

    【讨论】:

    • 这工作近乎完美!他们中的很多人加起来是正确的,但它跳过了 2 名学生,让一名学生获得 2.0 而不是 4.0,我在这里找不到任何逻辑错误......
    • 添加了一个 WHERE is not null 并且它修复了它!非常感谢!
    • @Sean 干得好。如果您发现其中一个答案解决了您的问题,请随时将其标记为已接受
    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 2018-09-08
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    相关资源
    最近更新 更多