oracle sql的秩函数

oracle sql的秩函数,sql,oracle,window-functions,top-n,Sql,Oracle,Window Functions,Top N,我是sql新手,正在做作业。有一个问题,我应该在哪里使用秩函数,但我不知道如何使用它。我试图在网上找到一些信息,但仍然有问题。我在这里发布问题,如果你有任何文章或评论,这将是有益的,请张贴在这里 谢谢,秩函数的语法: rank( expression1, ... expression_n ) WITHIN GROUP ( ORDER BY expression1, ... expression_n ) 这是一个例子: select rank(1000, 500) WITHIN GROUP (O

我是sql新手,正在做作业。有一个问题,我应该在哪里使用秩函数,但我不知道如何使用它。我试图在网上找到一些信息,但仍然有问题。我在这里发布问题,如果你有任何文章或评论,这将是有益的,请张贴在这里


谢谢,

秩函数的语法:

rank( expression1, ... expression_n ) WITHIN GROUP ( ORDER BY expression1, ... expression_n )
这是一个例子:

select rank(1000, 500) WITHIN GROUP (ORDER BY salary, bonus) from employees;
当我们使用
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()和density_RANK都无法保证的。那看起来像

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


请记住,您的老师可能足够聪明,知道StackOverflow,所以在分配学分时要诚实。

我认为应该是排号而不是排名。通过排名,您可能会得到类似于
1,2,3,3,5,5,8,…
的结果,页码将是
1,1,1,1,1,1,2,…
,即同一页面上有5个以上的项目。当然,对于ROW_编号,最好提供一个平局断路器,我认为
aid
应该可以作为一个。(即使不是一个理想的方案,但至少会让结果变得可预测。)