2013-05-01 136 views
1

如果他们低于表格中学生的平均GPA分数,我试图将表格中学生的GPA曲线上调0.3点。我怎么会这样做?例如,将不胜感激。我有一个名为score,列名和gpa的表。我所知道的是我可能不得不使用更新。我是新来的SQL与遗憾的问题类型...根据列平均值更新列值

+0

请发布在您的问题的示例数据和基于它的所需输出 – peterm 2013-05-01 20:50:09

回答

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子句中没有主键而大吼,但忽略它。 祝你好运!这很有趣;)

+0

“缺少Set关键字”发生错误 – user12074577 2013-05-03 19:16:52

+0

这就是所有的错误说?提供的第二条语句有一个SET关键字。 – 2013-05-03 21:18:48