已知关系模式:
S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名
C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩
写一SQL,功能:列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
我写为:
select s.sname,avg(sc.scgrade)
from s,sc
where s.sno=sc.sno and
s.sno in(
select sc1.sno
from sc sc1
where sc1.scgrade<60
group by sc1.sno
having count(sc1.sno)>=2
)
结果提示出错:
-- 服务器: 消息 8118,级别 16,状态 1,行 16
-- 列 's.SNAME' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句:
另外,下面的SQL是可以的(但我想知道为什么上面的SQL 有问题)
select s.sno,s.sname,ave(scgrade)
from s,sc,(select cno from sc wherescgrade<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