首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

Oracle数据表高效查询有关问题求解

2012-12-25 
Oracle数据表高效查询问题求解有员工表empinfo(fempno varchar2(10) not null pk,fempname varchar2(20) n

Oracle数据表高效查询问题求解
有员工表empinfo
(fempno varchar2(10) not null pk,
fempname varchar2(20) not null,
fage number not null,
fsalary number not null);

假如数据量很大约1000万条,写一个你认为最高效的sql,用一个sql计算一下四种人:
fsalary>9999 and fage>35
fsalary>9999 and fage<35
fsalary<9999 and fage>35
fsalary<9999 and fage<35

[最优解释]


SELECT COUNT(CASE
               WHEN fsalary > 9999 and fage > 35 THEN
                1
               ELSE
                NULL
             END) A,
       COUNT(CASE
               WHEN fsalary > 9999 and fage < 35 THEN
                1
               ELSE
                NULL
             END) A,
       COUNT(CASE
               WHEN fsalary < 9999 and fage > 35 THEN
                1
               ELSE
                NULL
             END) A,
       COUNT(CASE
               WHEN fsalary < 9999 and fage < 35 THEN
                1
               ELSE
                NULL
             END) A
  FROM empinfo

[其他解释]

SELECT CASE  
               WHEN fsalary > 9999 and fage > 35 THEN  'fsalary > 9999 and fage > 35'
               WHEN fsalary > 9999 and fage < 35 THEN  'fsalary > 9999 and fage < 35'
               WHEN fsalary < 9999 and fage > 35 THEN  'fsalary < 9999 and fage > 35'


               WHEN fsalary < 9999 and fage < 35 THEN  'fsalary < 9999 and fage < 35'
               ELSE 'other'  END,COUNT(*)
  FROM empinfo 
  GROUP BY CASE  
               WHEN fsalary > 9999 and fage > 35 THEN  'fsalary > 9999 and fage > 35'
               WHEN fsalary > 9999 and fage < 35 THEN  'fsalary > 9999 and fage < 35'
               WHEN fsalary < 9999 and fage > 35 THEN  'fsalary < 9999 and fage > 35'
               WHEN fsalary < 9999 and fage < 35 THEN  'fsalary < 9999 and fage < 35'
               ELSE 'other'  END


[其他解释]
如果我没想错,你这四种情况已经将所有信息都覆盖了。
你直接select count(*) from empinfo;不就完事了。
[其他解释]
如果你要分别计算的话,看fsalary和fage看哪个条件能一次过滤的数据比较多,条件调整一下顺序而已。
[其他解释]
select fempno,fempname,count(*) sl  from empinfo
 group by fempno,fempname;
[其他解释]
select fempno,fempname,count(*) sl from empinfo where fsalary>9999 and fage>35
 group by fempno,fempname;

[其他解释]
引用:
select fempno,fempname,count(*) sl from empinfo where fsalary>9999 and fage>35
 group by fempno,fempname;


这句话只计算出了一种人的数量,其它人的计算方法如果跟它相同的话,没有提高查询效率:需要全表查询四次。
[其他解释]
引用:
SQL code


SELECT COUNT(CASE
               WHEN fsalary > 9999 and fage > 35 THEN
                1
               ELSE
                NULL
             END) A,
       COUNT(CASE
         ……


能分析下执行了几次全表查询吗?

热点排行