问一个简单的问题!关于查询的!
有三张表:课程表,选课表,成绩表'
用一句sql语句怎么实现:试求所有学生学号、选课门数及平均成绩。

解决方案 »

  1.   

    select a.学号,count(distinct b.选课内容) 选课门数,avg(c.成绩) 平均成绩 
    from 课程表 a
      join 选课表 b on a.id=b.id
      join 成绩表 c on b.id=c.id
    group by a.学号
      

  2.   

    再不清楚看这里:
    http://topic.csdn.net/u/20090331/08/974cf653-f6d8-4a9a-b1f5-bbe633d84383.html
      

  3.   

    select 学生表.学号,count(选课表.课程名),avg(成绩表.成绩) from 
    学生表,选课表,成绩表
    where 学生表.学号=成绩表.学号 and 
    成绩表.课程号=选课表.课程号 group by 学生表.学号
    这种写法和你上面有什么区别吗?
      

  4.   

    没有区别,但是有些时候你上面的方法不如 join 方便。
      

  5.   


    select  a.学号,count(distinct c.课程号),avg(成绩) from 学生表 a left join (成绩表 b join 课程表 c on b.课程号=c.课程号) on a.学号 = b.学号  
    group by a.学号
      

  6.   


    select 学号, dbo.getNum01() as [选课门数],dbo.getNum01() as [平均成绩] from 成绩表
    create function getNum01(@studentID varchar(200))
    returns int
    as 
    begin
    declare @n int
    select @n=count(*) from 成绩表 where 学号=@studentID
    return @n
    endcreate function getNum02(@studentID varchar(200))
    returns float
    as 
    begin
    declare @m float
    select @n=avg(成绩) from 成绩表 where 学号=@studentID
    return @m
    end