oracle中rank() over与row_number()的差异

oracle中rank() over与row_number()的区别

rank() OVER对有相同的值,标记相同的值。row_number() 则不会。

故如果要进行排重操作,使用row_number() 将不会有重复记录的产生。

 

eg:

 

-------rank() over-------------

select tmp.*

       from (select s.YTNEWSID,s.TITLE,s.TITLE_IMG,s.CHANNEL_ID,

                          rank() over(partition by s.CHANNEL_ID order by release_date desc) px

                          from YT_NEWS s

                          where s.status=1

                          ) tmp

                 where px <= 5

 

partition by s.CHANNEL_ID order by release_date desc根据列CHANNEL_ID 分组,按照release_date 降序排列。

 

------row_number() over()-------

select *

  from (select  s.YTNEWSID,s.TITLE,s.TITLE_IMG,s.CHANNEL_ID,

               (Row_number()

                over(partition by channel_id order by release_date desc)) rn

          from news s)

 where rn <= 5;