2013-02-11 77 views
0

我是新來的sql和工作任務。有一個問題,我應該使用rank函數,但我不知道如何使用它。我試圖在網上找到一些信息,但仍然有問題。我在這裏發佈問題,如果您有任何有用的文章或評論,請在此發佈。Rank函數oracle sql

感謝,

回答

0

我不undersatand什麼是如此難以把握有關秩()通過降序發佈日期,但在這裏它是無論如何:

select aid 
     , email 
     , trunc((rnk-1)/5) + 1 as pageno 
from (select aid 
       , email 
       , rank() over (order by post_date desc) as rnk 
     from ads) 

您可能需要調整頁碼的計算;該問題在該分數上有些模棱兩可(「將列出除第一頁之外的所有廣告列出的廣告的頁碼」)。


由於@AndriyM評論,在現實生活中,我們將使用ROW_NUMBER()這個,而不是RANK(),因爲該功能會爲每個行無間隙鮮明的數量,既不RANK(),也可以DENSE_RANK保證。這看起來就像

row_number() over (order by post_date desc, aid asc) as rn 

記住,你的老師可能是足夠聰明,知道StackOverflow上請緊,所以說實話在哪裏這是由於分配功勞。

+1

我認爲它應該是ROW_NUMBER而不是RANK。使用RANK,你可能會得到類似'1,2,3,3,5,5,5,8,...'的結果頁碼爲'1,1,1,1,1,1,1, 2,...',即在同一頁面上超過5個項目。當然,對於ROW_NUMBER來說,最好是提供一個決勝局,我認爲'aid'應該是一樣的。 (即使不是理想的,也至少會使結果可預測。) – 2013-02-11 10:30:43

0

秩函數的語法:

rank(expression1, ... expression_n) WITHIN GROUP (ORDER BY expression1, ... expression_n) 

,這是一個例子:

select rank(1000, 500) WITHIN GROUP (ORDER BY salary, bonus) from employees; 
+0

我已經閱讀過這個,但它不幫助我猜 – 2013-02-11 04:37:33