CREATE TABLE t_student (
f_id char(3)   NOT NULL Primary Key,
f_name char(8)   NOT NULL ,
f_sex char(1)   NOT NULL ,
f_birth date NULL ,
f_department char(5)   NULL ,
f_class int NULL 
);CREATE TABLE t_course(
f_id char(2)   NOT NULL Primary Key,
f_name char(10)   NULL ,
f_teacher char(8)   NULL 
);CREATE TABLE t_grade (
f_stuid char(3)   NOT NULL REFERENCES t_student(f_id),
f_courseid char(2)   NOT NULL REFERENCES t_course(f_id),
f_grade int NULL ,
Primary Key(f_stuid,f_courseid)
);--t_student
insert into t_student values('001','张三','m','01-8月-84','CS',1);
insert into t_student values('002','李四','f','11-5月-86','PHY',3);
insert into t_student values('003','王五','m','17-6月-83','CS',1);
insert into t_student values('004','马六','m','23-7月-87','Maths',4);
insert into t_student values('005','田七','m','03-9月-81','CS',2);
insert into t_student values('006','赵八','f','19-10月-82','CS',2);
insert into t_student values('007','陈九','f','07-12月-87','Maths',4);
insert into t_student values('008','楚留香','m','08-3月-86','CS',2);
insert into t_student values('009','陈世美','m','10-4月-85','PHY',3);
insert into t_student values('010','田富贵','m','27-5月-84','PHY',3);
insert into t_student values('011','刘晨','f','21-6月-85','CS',1);
insert into t_student values('012','张明','m','15-8月-82','BIO',1);--t_course
insert into t_course values ('01','C语言','wang');
insert into t_course values ('02','Java','yang');
insert into t_course values ('03','SqlServer','qin');
insert into t_course values ('04','WinForm','zhang');
insert into t_course values ('05','Oracle','qi');
insert into t_course values ('06','Web','yin');
insert into t_course values ('07','C++','wei');
insert into t_course values ('08','English','huang');
insert into t_course values ('09','OOAD','hua');--t_grade
insert into t_grade values('001','01',61);
insert into t_grade values('001','02',69);
insert into t_grade values('001','03',70);
insert into t_grade values('001','04',79);
insert into t_grade values('001','07',88);
insert into t_grade values('001','08',89);
insert into t_grade values('002','01',96);
insert into t_grade values('002','02',69);
insert into t_grade values('002','03',55);
insert into t_grade values('002','04',59);
insert into t_grade values('002','06',78);
insert into t_grade values('002','07',54);
insert into t_grade values('002','08',67);
insert into t_grade values('003','01',86);
insert into t_grade values('003','02',62);
insert into t_grade values('003','03',79);
insert into t_grade values('003','04',59);
insert into t_grade values('003','05',70);
insert into t_grade values('003','06',60);
insert into t_grade values('003','07',76);
insert into t_grade values('003','08',60);
insert into t_grade values('004','01',80);
insert into t_grade values('004','03',50);
insert into t_grade values('004','04',49);
insert into t_grade values('004','05',89);
insert into t_grade values('004','07',48);
insert into t_grade values('004','08',83);
insert into t_grade values('005','01',73);
insert into t_grade values('005','03',63);
insert into t_grade values('005','04',53);
insert into t_grade values('005','05',93);
insert into t_grade values('005','07',43);
insert into t_grade values('005','08',91);
insert into t_grade values('006','01',81);
insert into t_grade values('006','02',61);
insert into t_grade values('006','03',71);
insert into t_grade values('006','04',92);
insert into t_grade values('006','05',82);
insert into t_grade values('006','06',72);
insert into t_grade values('007','01',62);
insert into t_grade values('007','02',52);
insert into t_grade values('007','03',94);
insert into t_grade values('007','04',84);
insert into t_grade values('007','05',74);
insert into t_grade values('007','08',64);
insert into t_grade values('008','01',54);
insert into t_grade values('008','02',95);
insert into t_grade values('008','03',85);
insert into t_grade values('008','04',75);
insert into t_grade values('008','05',65);
insert into t_grade values('008','06',55);
insert into t_grade values('008','08',61);
insert into t_grade values('009','02',62);
insert into t_grade values('009','03',63);
insert into t_grade values('009','04',64);
insert into t_grade values('009','06',65);
insert into t_grade values('009','07',66);
insert into t_grade values('009','08',67);
insert into t_grade values('010','01',68);
insert into t_grade values('010','03',69);
insert into t_grade values('010','04',73);
insert into t_grade values('010','06',71);
insert into t_grade values('010','07',72);
insert into t_grade values('010','08',77);
insert into t_grade values('011','01',78);
insert into t_grade values('011','02',79);
insert into t_grade values('011','04',89);
insert into t_grade values('011','05',86);
insert into t_grade values('011','08',98);
commit;问题如下:
1.统计各门课程的总人数、及格人数和不及格人数(课程编号、课程名、总人数、及格人数、不及格人数)
2.查询未选课程的学生名单(学号、姓名),查询选择所有课程的学生名单请高手们帮我实现这两个功能,并给出相应语句。谢谢...

解决方案 »

  1.   

    --合计
    SELECT   a.f_id "课程编号",
             a.f_name "课程名",
             b.total "总人数",
             b.ok "及格人数",
             b.fail "不及格人数"
      FROM   t_course a,
             (  SELECT   t.f_courseid,
                         COUNT (1) total,
                         SUM (CASE WHEN t.f_grade >= 60 THEN 1 ELSE 0 END) ok,
                         SUM (CASE WHEN t.f_grade < 60 THEN 1 ELSE 0 END) fail
                  FROM   t_grade t
              GROUP BY   t.f_courseid) b
     WHERE   a.f_id = b.f_courseid;--未选谭
    SELECT b.f_id "学号", b.f_name "姓名"
      FROM t_student b
     WHERE NOT EXISTS (SELECT 1 FROM t_grade a WHERE a.f_stuid = b.f_id);
     
    --选所有谭
    SELECT a.f_id "学号", a.f_name "姓名"
      FROM t_student a,
           (SELECT t.f_stuid, COUNT(*) cnt
              FROM t_grade t
             GROUP BY t.f_stuid
            HAVING COUNT(1) >= (SELECT COUNT(*) FROM t_course)) b
     WHERE a.f_id = b.f_stuid;
      

  2.   

    问题:统计各门课程选课的人数,若课程无人选择则选课人数为0(课程编号、课程名、选课人数)select t_course.f_name,nvl(count(*),'0')
    from t_course left join t_grade
    on t_course.f_id = t_grade.f_courseid
    group by t_course.f_name上面的代码是我写的,可是不是我想要的结果,因为:应该显示0,可是显示的却是1
    请求帮助,谢谢!!1
      

  3.   

    select f_courseid,f_name,count(*)
    from t_grade,t_course
    where t_grade.f_courseid=t_course.f_id
    group by f_courseid;
      

  4.   

    不要用count(*),用count(t_grade.f_stuid)。
    select t_course.f_name,count(t_grade.f_stuid)
    from t_course left join t_grade
    on t_course.f_id = t_grade.f_courseid
    group by t_course.f_name