2013-05-01 138 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