在subselect中好像不能用order by 吧,
SQL> select id 
  2  from 
  3  (select id from tab1 order by wage desc)
  4  where rownum <= (select count(*)*0.02 from tab1);
(select id from tab1 order by wage desc)
                     *
ERROR at line 3:
ORA-00907: missing right parenthesisSQL>
 
改成group by才能成功吧,因为group by有order by asc的功能。
select id from tab1
minus
select id
from
(
select id,WAGE from tab1
GROUP by WAGE,ID
)
where rownum <= (select count(*)*(1-0.02) from tab1)
效率就没办法了,可能改成procdure会好一点。

解决方案 »

  1.   

    select id from tab1
    where rownum <= (select count(*)*0.1 from tab1) order by wage asc
      

  2.   

    该语句必须在oracle8以上才行。
      

  3.   

    楼上的语句恐怕不行,因为这个语句中的rownum还是排序前的rownum,不能起到作用,虽然看上去是一样的。另外 dy125(民),在oracle 8以上就可以在子查询中用order by了。最后,我认为贴主的办法已经是很好的了,效率问题还是从其他方面入手较好。