2010-02-25 38 views
3

我有关系指导(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名教官下一步排名教官?谢谢。

回答

-1

我想通了其实用ROWNUM ...

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

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

2

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