mysql 如何將女學生中低于總平均成績的成績提高5%?
問題描述
mysql> desc SC ;FieldTypeNullKeyDefaultExtraSIDint(11)NOPRINULL CIDint(11)NOPRINULL GRADEint(11)YES NULL3 rows in set (0.00 sec)
mysql> desc S ;FieldTypeNullKeyDefaultExtraSIDint(11)NOPRINULL SNAMEvarchar(20)YES NULL AGEint(11)YES NULL SEXint(11)YES NULL表結構如上, 我寫了一個sql:
update SC set GRADE = (GRADE+GRADE*0.05) where GRADE < (select AVG(GRADE) from SC x) and SID in (select SID from S where SEX = 1) ;
但是報錯:
ERROR 1093 (HY000): You can’t specify target table ’SC’ for update in FROM clause
我到mysql的官網上也沒找到解決的辦法, 看了幾個博客說是要使用中間表, 但是還是寫不出來, 那么正確的sql是怎樣的呢? 望告知
問題解答
回答1:begindeclare n_avg number;select avg(grade) into n_avg from SC;update SC set GRADE = GRADE*1.05 where grade<n_avg and sid in (select SID from S where SEX=1);end回答2:
select @avgs:=(select avg(grade) from SC);update SC set GRADE = (GRADE+GRADE*0.05) where GRADE < @avgs and SID in (select SID from S where SEX = 1) ;回答3:
有SC表里CID表示課程ID,所以,應該是按課程分類,比如語文的平均分是80,那么語文低于80分的女生的分數,就要增加5%,然后每門課都按這樣的邏輯進行
我的理解對嘛?對的話,我就敲代碼了。
相關文章:
1. windows - asp.net連接上mysql之后如何調用?比如下面的登錄驗證功能怎么實現2. css3 - Typecho 后臺部分表單按鈕在 Chrome 下出現靈異動畫問題,求解決3. javascript - 編程,算法的問題4. 剛放到服務器的項目出現這中錯誤,有高手指點嗎5. mysql - 面試題:如何把login_log表轉換成last_login表?6. javascript - 為什么嵌套的Promise不能按預期捕獲Exception?7. java - HTTPS雙向認證基礎上有無必要再進行加簽驗簽?8. apache - 想把之前寫的單機版 windows 軟件改成網絡版,讓每個用戶可以注冊并登錄。類似 qq 的登陸,怎么架設服務器呢?9. javascript - nodejs實現異步時遇到的一個問題10. java - 阿里的開發手冊中為什么禁用map來作為查詢的接受類?
