基于列平均值更新列值

时间:2013-05-01 20:38:29

标签: sql sql-update

如果他们低于表格中学生的平均成绩,我试图将学生的表格增加0.3分。我怎么会这样做呢?例子将不胜感激。我有一个名为score的表,列名和gpa。我所知道的是我可能不得不使用更新。我是SQL的新手,对于问题的类型也很抱歉...

1 个答案:

答案 0 :(得分: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

最内层查询在表上查找avg 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子句中没有主键可能会对你大喊大叫但是忽略它。 祝好运!这很有趣;)