查询每个学生超过他选修课平均成绩的课程的课程号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)

解决方案 »

  1.   


    declar @a float
    select @a=avg(grade) from sc sc2 where sc2.sno = sc1.snoselect sno,cno from sc sc1
    where grade > @a
      

  2.   

    我是想问仅仅
    select sno,cno from sc sc1
    where grade > (select avg(grade) from sc sc2 group by sc1.sno)
    这样写逻辑上为什么不对啊?
      

  3.   

    回复3楼:我用的是
    group by sc1.sno这样应该和主查询是有关联的啊
      

  4.   

    哇,这样语法就不通,group by 怎么还用了别的表上去了
      

  5.   

    select sno,cno from sc sc1
    where grade > (select avg(grade) from sc sc2 group by sc1.sno)
    “group by sc1.sno”只是按学号进行分组,并没有SC SC2表的连接条件
      

  6.   

    我的想法是这样的:
    执行计划中显示的是:嵌套循环。
    那么当外层执行到sc表中的第n条记录时,内层按照第n条记录的sno进行group by,这样就可以查询出想要的结果了