查询每个学生超过他选修课平均成绩的课程的课程号sno是学好,cno是课程号,grade是成绩为什么第二种写法不对啊???写法1:
select sno,cno from sc sc1
where grade > (select avg(grade) from sc sc2 where sc2.sno = sc1.sno)
写法2:
select sno,cno from sc sc1
where grade > (select avg(grade) from sc sc2 group by sc1.sno)
select sno,cno from sc sc1
where grade > (select avg(grade) from sc sc2 where sc2.sno = sc1.sno)
写法2:
select sno,cno from sc sc1
where grade > (select avg(grade) from sc sc2 group by sc1.sno)
解决方案 »
- 新人求教SQL写法
- 怎么使SQL中的字符串字段实现自增 该字段设为主键
- 一致性错误,为什么经常出现呢?来者有分,在线等!
- 关于SQL查询结果重复的问题?
- 为什么在sql server2000中禁用了windows系统用户,AGENT代理无法启动,有什么办法能让sa启动代理并正常运行
- 有关数据类型的问题
- 请教一个难题呀,我的SQL Server2000数据库的日志文件误操作删除了,数据文件无法附加了,十分着急,怎么附加呢?
- 菜鸟求解数据库问题
- 请问:请问能否从.MDF 和.LDF两个文件着两个文件恢复数据库?在先等待,解决即给分!!
- 请教:如何将两行数据相减
- 求救关于创建两表的问题
- 关于一个update的sql,那位大哥帮忙解决一下
declar @a float
select @a=avg(grade) from sc sc2 where sc2.sno = sc1.snoselect sno,cno from sc sc1
where grade > @a
select sno,cno from sc sc1
where grade > (select avg(grade) from sc sc2 group by sc1.sno)
这样写逻辑上为什么不对啊?
group by sc1.sno这样应该和主查询是有关联的啊
where grade > (select avg(grade) from sc sc2 group by sc1.sno)
“group by sc1.sno”只是按学号进行分组,并没有SC SC2表的连接条件
执行计划中显示的是:嵌套循环。
那么当外层执行到sc表中的第n条记录时,内层按照第n条记录的sno进行group by,这样就可以查询出想要的结果了