如何临时更改 MySQL 中的值
How to temporarily change values in MySQL
我有一个 table,其中包含以下信息:ID、姓名、course_num、学分、成绩,我需要计算每个学生的 GPA。查询应该很简单,但是,成绩存储为字母字符,因此我必须先转换它才能进行任何添加。如何在不修改 table 中的值的情况下执行此操作?
答:4.0; A-:3.67; B+:3.33;乙:3; B-:2.67; C+:2.33;丙:2; C-:1.67; D+:1.33; D:1个; D-:0.67; F: 0
我应该指出 table 我拥有的信息是连接 3 个 table 的子查询的结果课程信息分别。
最终将使用 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
您的查询是正确的。我刚刚将 name
添加到 group by
子句,修改了数学并对其进行了一些格式化:
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`;
试一试,看看效果如何。
我有一个 table,其中包含以下信息:ID、姓名、course_num、学分、成绩,我需要计算每个学生的 GPA。查询应该很简单,但是,成绩存储为字母字符,因此我必须先转换它才能进行任何添加。如何在不修改 table 中的值的情况下执行此操作?
答:4.0; A-:3.67; B+:3.33;乙:3; B-:2.67; C+:2.33;丙:2; C-:1.67; D+:1.33; D:1个; D-:0.67; F: 0
我应该指出 table 我拥有的信息是连接 3 个 table 的子查询的结果课程信息分别。
最终将使用 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
您的查询是正确的。我刚刚将 name
添加到 group by
子句,修改了数学并对其进行了一些格式化:
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`;
试一试,看看效果如何。