排名函数oracle sql

时间:2013-02-11 04:16:37

标签: sql oracle window-functions top-n

我是sql的新手,正在完成任务。有一个问题,我应该使用rank函数,但我不知道如何使用它。我试图在互联网上找到一些信息,但仍然有问题。我在这里发帖提问,如果您有任何有用的文章或评论,请在此处发帖。

谢谢,

2 个答案:

答案 0 :(得分:0)

排名功能的语法:

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

这是一个例子:

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

答案 1 :(得分:0)

当我们按照POST_DATE降序排序rank()时,最近的日期排名为1:

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,所以请诚实地分配到期的信用额度。