如果他们低于表中学生的平均 gpa 分数,我试图将表中学生的 gpa 提高 0.3 分。我怎么会做那样的事情?示例将不胜感激。我有一个名为 score 的表,其中包含列名称和 gpa。我所知道的是我可能不得不使用更新。我是 SQL 新手,也对这种问题感到抱歉......
问问题
561 次
1 回答
1
SELECT S.name, S.gpa, C.avgGPA AS AverageGPA,
CASE S.gpa < C.avgGPA
WHEN true THEN (S.gpa + 0.3)
ELSE S.gpa
END as CurvedGPA
FROM StudentGrades AS S JOIN (
SELECT avg(gpa) AS avgGPA
FROM StudentGrades
) AS C
最内层查询在表中找到平均 GPA。假定 gpa 的数据类型为十进制。第二个最里面的查询选择所有数据,因此您可以查看所有比较以验证结果并执行逻辑来曲线它。在 mySQL Workbench 上测试,但语法应该适用于 Oracle。上面的例子是安全的,不会修改数据,但是你要求更新所以......
您的问题的答案(如果多次运行不安全):
UPDATE StudentGrades AS S JOIN (
SELECT avg(gpa) AS avgGPA
FROM StudentGrades
) AS C
SET S.gpa = S.gpa + 0.3
WHERE S.gpa < C.avgGPA
它可能会对 WHERE 子句中没有主键大喊大叫,但忽略它。祝你好运!这很有趣;)
于 2013-05-01T22:25:52.967 回答