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,本人抛砖引玉,欢迎提出更好的方法,如有错误也请指出。谢谢。
全文完。