问题描述:
S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名
C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩
1. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
--实现代码:
Select S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE) FROM S,SC,( Select SNO FROM SC Where SCGRADE<60 GROUP BY SNO HAVING COUNT(DISTINCT CNO)>=2 )A Where S.SNO=A.SNO AND SC.SNO=A.SNO GROUP BY S.SNO,S.SNAME
为什么为什么 要distinct CNO ?
举个例子, 某位同学第一年修了课程一,挂科了,第二年是不是还要修课程一(重修),又挂了,课程ID:CNO,还是同样的呢?两次都挂了,但是是同一门课程,但你的要求是有二门以上(含两门)不及格课程。明白了吗?
明白了谢谢
distinct查找多字段不好用,多字段还是group by 好
Select SNO FROM SC Where SCGRADE<60 GROUP BY SNO HAVING COUNT(DISTINCT CNO)>=2
过滤掉不同科目的,实现二门以上(含两门)不及格课程
我意思是 怎么可能出现重复的呢 ?分组后怎么会有 重复的CNO ,什么情况下啊 想不明白为什么会有不同科目的CNO