SQL-1

有三个表:
学生表:student(sno,sname,sage,ssex)sno:学生号;sname:学生姓名;】
程表:course(cno,cname,cteacher)cno程号;cname程名称;】
学生选课表:sc(sno,con,grade)sno:学生号;cno程号;grade程成
问题是:
1.
查询选修了001002而没有003程的学生学号;
2.
算平均成最高的学生学号

3. 查询选修了两门课以上的学生学号;

 

1.

select distinct t.sno

from sc t,sc t1

where t.sno=t1.sno

and t.cno='001'

and t1.cno='002'

and t.sno not in

(select distinct t2.sno from sc t2 where t2.cno='003')

 

2.

select sno

from sc

group by sno

having avg(grade)=

(SELECT max(a.aaa)

FROM (select avg(grade)as aaa from sc GROUP BY Sno) a)

 

3.

select sno

from  sc

group by sno

having count(cn)>=2

 

ERROR:
SELECT MAX(AVG(Grade)) FROM Sc  GROUP BY Sno
OK:
SELECT max(a.aaa) FROM (select avg(grade)as aaa from sc GROUP BY Sno) a
 
1.    注意如果要一个使用 GROUP BY 和聚集操作符的查询果有意, 那
   用于分的属性也必在目列表中。 所有没有在 GROUP BY 子句里面
的属性都只能通使用聚集函数来选择就不会有唯一的数与其
   它字段关联
2.    注意的是在聚集上聚集是没有意的,比如MAX(AVG(Grade)), 因 SELECT 
   只做一个回合的分和聚集.你可以这样果, 方法是使用临时表或
 FROM 子句中使用一个子 SELECT 做第一个次的聚集.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值