2012-11-06 67 views
0

給定學生和成績表,是否有辦法將每個學生的成績增加10%,但沒有超過100?遞增值的限制(標準sql)

現在我做

UPDATE studentCourse 
SET grade = grade + 10 * (grade/100) 
WHERE csid = 1 

換句話說,如果一個學生有60個,在更新之後,他應該有66但是,如果一個學生有一個98,在更新之後他的等級應爲100(而不是108)。

這一切都在標準的SQL

+0

難道你的意思是66應該變成72.6? –

回答

0

你可以你只要運行兩個語句

UPDATE studentCourse 
SET grade = grade + 10 * (grade/100) 
WHERE csid = 1; 

其次

UPDATE studentCourse 
SET grade = 100 
where csid = 1 
    and grade > 100; 

COMMIT; 
1

做我沒有一個實例來測試這個代碼,但假設你的數據是realiable(所有0 - 100),你可以使用在CASE語句情況下,分數低於90添加爲你已經是10%,否則在其他情況下,我們可以說,將比分100

如:

UPDATE [studentCourse] 
SET grade= 
(
CASE 
    WHEN 
    (grade <= 90) 
    THEN grade + 10 * (grade/100) 
    ELSE 
    (100) 
    END 
) 
WHERE 
csid = 1 
+0

爲了成爲「最古老的正確」答案,我非常喜歡原始答案,而沒有「偷偷摸摸」的編輯。仍然。我upvoted :) – stefan

+1

等級應該小於或等於90 (等級<= 90) –

+0

我認爲我最好用一個例子來支持它;)<= 90上的好點。 – chrisc

0

MySQL有一個功能LEAST(),可以幫助:

UPDATE studentCourse 
SET grade = LEAST(100, grade + 10 * (grade/100)) 
WHERE csid = 1; 

LEAST()功能是MySQL特有。如果您想嚴格遵從ANSI SQL,請使用@chrisc建議的CASE