with e as (select m.sal, rank()over(order by sal desc) as mv from (select distinct(sal) from emp) m)
select * from emp where emp.sal>=(select min(e.sal) from e where e.mv<3) order by emp.sal desc;
上面是以前写的 虽然能用但是在方面明显不足
最近看到oracle本身是有提供相关函数的:
比如 rank()over()
dense_rank()over()
row_number()over()等一系列分析函数
解决上面的问题就很好办了
select dense_rank()over(order by sal) from emp;