2010-02-25 49 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