2013-02-11 70 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