select S.Sname,avg(SC.Grade)
from S_1111 S,SC_1111 SC,C_1111 C
where (select count(SC.Cnum)
       from S_1111 S,SC_1111 SC
       where S.Snum=C.Snum
       and SC.Grade>60)>3
       order by avg(SC.Grade) desc);
错误 如何修改? 

解决方案 »

  1.   

    这应该是一个经典的错误。   select S.Sname,avg(SC.Grade)   这句话,求平均值得出来是几个结果?   你又加一个S.Sname?? 你投影又得了几个结果?即:你求平均值这个字段是的出一个结果;可是你在S.Sname里有是多个数据?你想想这样能行吗?
      

  2.   


    你必须要group by 进行分组才可解决。即:
    select S.Sname,avg(SC.Grade)
    from S_1111 S,SC_1111 SC,C_1111 C
    where (select count(SC.Cnum)
          from S_1111 S,SC_1111 SC
          where S.Snum=C.Snum
          and SC.Grade>60)>3 
          group by S.Sname
          order by avg(SC.Grade) desc);
      

  3.   

    这样做以后 还是有问题。。
           order by avg(SC.Grade) desc)
                                      *
    第 8 行出现错误:
    ORA-00933: SQL 命令未正确结束
      

  4.   

    纠结!
    有聚集函数就用用分组吧,要不然用在SubQuery里面,不过问题是想求什么呢,理不出来逻辑呀!