使用rank选择Oracle SQL中的前10个元组

问题描述:

我有关系指导(ID,名称,部门名称,薪水)。使用rank选择Oracle SQL中的前10个元组

我们任务中的问题要求我们:使用SQL中的rank函数来编写一个查询来查找前10名薪水最高的指导员的ID和名称。

我就能通过select id, name, rank() over(order by(salary) desc) as sal from instructor order by sal

什么是我抓住了前10名教官下一步排名教官?谢谢。

我想通了其实用ROWNUM ...

select id, name from(
    select id, name, rank() over(order by(salary) desc) as sal 
    from instructor order by sal 
) 
where rownum <=10 

希望这可以帮助别人的未来!

solution接近答案,但它通常最好使用由RANK()函数给出的值:

select id 
     , name 
     , sal 
from (
    select id 
     , name 
     , sal 
     , rank() over(order by(salary) desc) as sal_rank 
    from instructor 
) 
where sal_rank <=10 
/

与ROWNUM的问题是,它任意截断结果集。如果我们有第十名的位置,那么知道这个事实通常很重要。使用ROWNUM可以返回一个单独的随机记录。

有时ROWNUM - 或分析ROW_NUMBER() - 将是正确的。这取决于精确的业务需求。

+0

不要忘记'DENSE_RANK()'。 – 2010-02-25 18:42:13