select empno, ename, deptno, sale
from (select empno,
ename,
sale,
deptno,
row_number() over(partition by deptno order by sale desc nulls last) as r_num,
count(*) over(partition by deptno) as n_rows
from emp)
where r_num <= round(n_rows * &n / 100)
order by deptno, sale desc;
参考了博客https://community.oracle.com/thread/2539806?tstart=0,本人抛砖引玉,欢迎提出更好的方法,如有错误也请指出。谢谢。
全文完。