在网上看到一个SQL语句是这样的。select sum(case when fsalary>9999 and fage<35 then 1 else 0 end) from empinfo;
这里的case/end, then 1 else 0 能起到提高查询效率的作用么?为什么。请大神们指教。

解决方案 »

  1.   

    不能!
    可以这样写啊:
    select Count(RowID) From empinfo Where fsalary>9999 and fage<35;
      

  2.   

    case...when怎么会提高查询效率。
    可以参考下面的解决办法
    实测数据:CREATE TABLE T113
    (
        ID VARCHAR2(20),
        Age NUMBER(4),
        NAME VARCHAR2(20)
    );INSERT INTO T113 VALUES('01', 8, 'A');
    INSERT INTO T113 VALUES('02', 9, 'B');
    INSERT INTO T113 VALUES('03', 16, 'C');
    INSERT INTO T113 VALUES('04', 20, 'D');
    INSERT INTO T113 VALUES('05', 30, 'E');
    INSERT INTO T113 VALUES('06', 25, 'F');
    INSERT INTO T113 VALUES('07', 65, 'G');
    INSERT INTO T113 VALUES('08', 67, 'H');
    INSERT INTO T113 VALUES('09', 66, 'I');
    实测结果:
      

  3.   

    case 语句有两种形式,一种是case后带选择器的一种不带,lz的这个case 是后者,用scott.emp表测试,求工资大于1000小于2000的人数之和如下:
    SQL> select * from emp;     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
        DEPTNO
    ---------- ---------- --------- ---------- -------------- ---------- ----------
    ----------
          7369 SMITH      CLERK           7902 17-12月-80            800
            20
          7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300
            30
          7521 WARD       SALESMAN        7698 22-2月 -81           1250        500
            30
          7566 JONES      MANAGER         7839 02-4月 -81           2975
            20
          7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400
            30
          7698 BLAKE      MANAGER         7839 01-5月 -81           2850
            30
          7782 CLARK      MANAGER         7839 09-6月 -81           2450
            10
          7839 KING       PRESIDENT            17-11月-81           5000
            10
          7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0
            30
          7900 JAMES      CLERK           7698 03-12月-81            950
            30
          7902 FORD       ANALYST         7566 03-12月-81           3000
            20
          7934 MILLER     CLERK           7782 23-1月 -82           1300
            10已选择12行。SQL> ed
    已写入 file afiedt.buf  1   SELECT SUM(case
      2   when sal>1000 AND sal<2000 then 1
      3   else 0
      4   END ) SUM
      5*  FROM emp
      6  /       SUM
    ----------
             5SQL>
    至于lz说能提高效率,应该是书中有上下文环境