1

如果他们低于表中学生的平均 gpa 分数,我试图将表中学生的 gpa 提高 0.3 分。我怎么会做那样的事情?示例将不胜感激。我有一个名为 score 的表,其中包含列名称和 gpa。我所知道的是我可能不得不使用更新。我是 SQL 新手,也对这种问题感到抱歉......

4

1 回答 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 回答