select 课程,count(*) "总人数",count(decode(sign(成绩-60),-1,1,0)) "不及格人数" from cjb group by 课程

解决方案 »

  1.   

    经测试,楼上的方法是错误的!!!CREATE TABLE CJB (课程 VARCHAR2(1),学号 VARCHAR2(1),成绩 NUMBER(3));
    INSERT INTO CJB VALUES('A','1',100);
    INSERT INTO CJB VALUES('A','2',50);
    INSERT INTO CJB VALUES('A','3',80);
    INSERT INTO CJB VALUES('A','4',60);
    INSERT INTO CJB VALUES('B','1',100);
    INSERT INTO CJB VALUES('B','2',50);
    INSERT INTO CJB VALUES('B','3',50);
    INSERT INTO CJB VALUES('B','4',60);
    INSERT INTO CJB VALUES('C','1',100);
    INSERT INTO CJB VALUES('C','2',50);
    INSERT INTO CJB VALUES('C','3',80);
    INSERT INTO CJB VALUES('C','4',60);
    INSERT INTO CJB VALUES('D','1',100);
    INSERT INTO CJB VALUES('D','2',50);
    INSERT INTO CJB VALUES('D','3',50);
    INSERT INTO CJB VALUES('D','4',60);select 课程,count(*) "总人数",count(decode(sign(成绩-60),-1,1,0)) "不及格人数" from cjb group by 课程;      总人数 不及格人数
    - ---------- ----------
    A          4          4
    B          4          4
    C          4          4
    D          4          4正确的应该是:select 课程,count(*) "总人数",sum(decode(sign(成绩-60),-1,1,0)) "不及格人数" from cjb group by 课程;      总人数 不及格人数
    - ---------- ----------
    A          4          1
    B          4          2
    C          4          1
    D          4          2注意:是 SUM,不是 COUNT
      

  2.   

    也可以用caseselect 课程,count(*) "总人数",sum(case when 成绩<60 then 1 else 0 end) "不及格人数" from cjb group by 课程;