三张表 
1. class 班级表 字段有classid(班级id) classname(班级名称)     2. student学生表 studentid  studentname classid(关联class)
 3.result 成绩表 resultid(成绩id)  subject(科目)testDate(考试时间)achievement(成绩)studentid(学生id)查找2013年8月23日全班数学平均分大于60的班级的班级名称(没有参加考试的学生视为0分)。成绩表里1班只有一个学生参加了考试, 1班有5个人。也就是说成绩表只查出1班一个学生,平均分要按照班级人数算。

解决方案 »

  1.   


    select classname from class
    where classid in
    (select classid from
    (select b.classid,sum(c.resultid)/count(b.studentid) avg
    from student b,result c
    where b.studentid=c.studentid
      and testDate='2013-8-23'
    group by b.classid)
    where avg>60);
      

  2.   

    select a.classid,max(a.classname),avg(c.achievement) as av
    from class a,student b,result c
    where a.classid=b.classid and b.studentid=c.studentid and testDate='2013-8-23' and subject='数学'
    group by a.classid
    having avg(c.achievement)>60