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. node.js - 在vuejs-templates/webpack中dev-server.js里为什么要exports readyPromise?2. CSS3 border凹陷该如何编写?3. html5 - 如何实现图中的刻度渐变效果?4. Java中call by value和call by reference的区别5. css3 - transition属性当鼠标一开的时候设置的时间不起作用6. apache - 怎么给localhost后面默认加上8080端口7. html - 移动端radio无法选中8. css - 关于伪类背景问题9. mysql - 数据库建字段,默认值空和empty string有什么区别 11010. windows-7 - Win7中Vmware Workstatoin与Xampp中Apache服务器端口冲突?
