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. docker-compose中volumes的问题2. 微信开放平台 - ios APP能不能打开微信然后通过微信跳转到指定的URL?3. php - mysql 模糊搜索问题4. angular.js - 百度支持_escaped_fragment_吗?5. mysql begin work语句是干嘛的?6. 新手 - Python 爬虫 问题 求助7. vim - win10无法打开markdown编辑器8. php mail无法发送邮件9. thinkphp5.1学习时遇到session问题10. python - 用scrapy-splash爬取网站 为啥iframe下的内容没有被返回
