现在有一个成绩表,主要字段有学号,班级,姓名,科目,总评成绩,科任老师,学期这几个字段,而我们的系统是这样使用的。例如A班有50人,这学期共有5门课,那学期初会先进行初始化,那数据库内就会有 50×5=250条关于这个班的数据了(这250条数据初始化时,总评成绩是NULL)。现在期末了,由每个老师输入自己教的科目。今天终于输入完了,但是我想用SQL语句来查查有哪个班的哪一科的成绩是没有输入的。。因为有些学生是退学或者缺考的,那他们的总评成绩就不处理,也是NULL的。。所以我想根据 某一个班的某一科中,成绩为NULL的人数是否和这个班的总人数相等,相等的应该就是还没输入成绩的了这样的SQL语句应该怎么写呢?谢谢了

解决方案 »

  1.   

    --tryselect classid,courseid from tablename
    group by classid,courseid
    having sum(case when grade is null then 1 else 0 end)=sum(studentid)
      

  2.   

    楼上手误了吧,应该把
    sum(studentid)
    改为
    count(studentid)
      

  3.   

    count(studentid) 应该不行吧。。因为学号不是学生表的主键,因为输入学生资料时,很多老师直接用1,2.。这些来做学号,所以学号很多人是相同的,现在也改不回了。。不好意思,上面漏了说明。。
      

  4.   

    请lz学习一下group by 和having语句的用法
      

  5.   

    哦,明白了。GROUP BY 和HAVING我的确不会啊,要努力了,十分感谢
      

  6.   

    --总评成绩输入情况表
    select 班级,科目,count(*) as 班级人数,sum(case when 总评成绩=0 then 1 else 0 end ) as 没有输入总评成绩,sum(case when 总评成绩>0 then 1 else 0 end) as 已经输入总评成绩 
    from project_saler_product where projectid ='0000000004' group by 班级,科目
      

  7.   

    --成绩为NULL的人数=这个班的总人数 
    select 班级,科目,count(*) as 班级人数,sum(case when 总评成绩=0 then 1 else 0 end ) as 没有输入总评成绩,sum(case when 总评成绩>0 then 1 else 0 end) as 已经输入总评成绩 
    from project_saler_product where projectid ='0000000004' group by 班级,科目 having count(*)=sum(case when 总评成绩=0 then 1 else 0 end )
      

  8.   

    select 科目 from 成绩表
    where 总评成绩 is null
    group by 科目
    having count(*)=50
      

  9.   

    总评成绩=0
    改成 
    总评成绩 is null
      

  10.   

    谢谢godfather_wang和marco08了,可惜已经结贴了,以后多指教!