在网上看到一个SQL语句是这样的。select sum(case when fsalary>9999 and fage<35 then 1 else 0 end) from empinfo;
这里的case/end, then 1 else 0 能起到提高查询效率的作用么?为什么。请大神们指教。
这里的case/end, then 1 else 0 能起到提高查询效率的作用么?为什么。请大神们指教。
调试欢乐多
可以这样写啊:
select Count(RowID) From empinfo Where fsalary>9999 and fage<35;
可以参考下面的解决办法
实测数据: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');
实测结果:
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说能提高效率,应该是书中有上下文环境