表中两个字段
name     fen
小明      90
小白      80
小黑      60
小红      70
小兰      92
小心      54
小K       83
查询出 80-100  为优秀  60-79为及格    0-59为不及格  的人数

解决方案 »

  1.   

    select sum(case when fen < 100 and fen >=80 then 1 else 0 end) 优秀人数,
           sum(case when fen < 80  and fen >=60 then 1 else 0 end) 及格人数,
           sum(case when fen < 60  and fen >=0 then 1 else 0 end) 不及格人数
    from 表名
      

  2.   

    --建表
    CREATE TABLE tbl
    (NAME VARCHAR2(20),
    score NUMBER );
    --插入测试数据
    INSERT INTO TBL
      SELECT '小明', 90
        FROM DUAL
      UNION ALL
      SELECT '小白', 80
        FROM DUAL
      UNION ALL
      SELECT '小黑', 60
        FROM DUAL
      UNION ALL
      SELECT '小红', 70
        FROM DUAL
      UNION ALL
      SELECT '小兰', 92
        FROM DUAL
      UNION ALL
      SELECT '小心', 54
        FROM DUAL
      UNION ALL
      SELECT '小K', 83 FROM DUAL;
    --查询
    SELECT BAND, COUNT(1)
      FROM (SELECT CASE
                     WHEN SCORE >= 80 THEN
                      '优秀'
                     WHEN SCORE >= 60 AND SCORE <= 79 THEN
                      '及格'
                     ELSE
                      '不及格'
                   END BAND
              FROM TBL)
     GROUP BY BAND;
      

  3.   

    SQL> conn scott/tiger
    已连接。
    SQL> ed
    已写入 file afiedt.buf  1  CREATE TABLE test (
      2     name varchar(20),
      3     fen NUMBER
      4* )
    SQL> /表已创建。SQL> @test.sql已创建 1 行。
    已创建 1 行。
    已创建 1 行。
    已创建 1 行。
    已创建 1 行。
    已创建 1 行。
    已创建 1 行。SQL> ed
    已写入 file afiedt.buf  1* SELECT * FROM test
    SQL> /NAME                        FEN
    -------------------- ----------
    小明                         90
    小白                         80
    小黑                         60
    小红                         70
    小兰                         92
    小心                         54
    小K                          83已选择7行。SQL> ed
    已写入 file afiedt.buf  1  select sum(case when fen BETWEEN 80 and 100 then 1 else 0 end) 优秀人数,
      2    sum(case when fen  BETWEEN 60 and 79 then 1 else 0 end) 及格人数,
      3    sum(case when fen BETWEEN 0 and 59 then 1 else 0 end) 不及格人数
      4* from  test
    SQL> /  优秀人数   及格人数 不及格人数
    ---------- ---------- ----------
             4          2          1SQL>ls几位 动作好快,大赞
      

  4.   

    问下这种 insert into from dual 的方式跟 直接values('','')有什么区别么?
    那种方式好?为什么要用这种方式?
      

  5.   

    我刚才谷歌了下,说多行插入 如果用 多行values 插入的性能 不如一行 select ‘xx’from dual 的好。,, 不知道是否有其事。。
      

  6.   

    看来多行values插入 影响性能确有其事了 只不过在数据量比较大的时候才会明显吧