一个数据库表结构如下
学号 课程号 成绩
S# C# score
S1 C1 100
S2 C2 45
S3 C3 60
S3 C2 35
S3 C1 43
S4 C4 100
S5 C4 100
S6 C3 80
S6 C2 46
S6 C1 25现要求有两门不及格课程的学生的平均成绩
这个要求可能会产生歧义
1、是求有两门不及格课程的所有学生的平均成绩
2、是求有两门不及格课程的每个学生的平均成绩请问该两个SQL语句分别如何写

解决方案 »

  1.   

    1、有两门不及格课程的所有学生的平均成绩 
    select avg(score ) from 
    (select * from table where score <60) t having count(S#) = 2
      

  2.   

    2、是求有两门不及格课程的每个学生的平均成绩
    select avg(score ) from 
    (select * from table where score <60) t having count(S#) = 2 group by S#
      

  3.   

    2、是求有两门不及格课程的每个学生的平均成绩 
    select avg(score),S# from table where S# in (select S# from (select distinct S# from table where score<60 having count(S#) = 2)t) group by S#
      

  4.   

    2.没那么复杂
    select avg(score) from @table1 where score<60  group by sno
    having count(sno) = 2