有员工表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

解决方案 »

  1.   


    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
      

  2.   

    如果我没想错,你这四种情况已经将所有信息都覆盖了。
    你直接select count(*) from empinfo;不就完事了。
      

  3.   

    如果你要分别计算的话,看fsalary和fage看哪个条件能一次过滤的数据比较多,条件调整一下顺序而已。
      

  4.   

    select fempno,fempname,count(*) sl  from empinfo
     group by fempno,fempname;
      

  5.   

    select fempno,fempname,count(*) sl from empinfo where fsalary>9999 and fage>35
     group by fempno,fempname;
      

  6.   


    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