oracle 中 rank() 和 row_number() 的一点小区别

601 阅读1分钟

当排序字段为空或一样时 rank()的行ID为一样的;row_number()则不一样

SELECT row_number() OVER(PARTITION BY 重复字段 ORDER BY 排序字段 ASC) R,B.* FROM table t where t.ID='1001';
SELECT rank()       OVER(PARTITION BY 重复字段 ORDER BY 排序字段 ASC) R,B.* FROM table t where t.ID='1001';

row_number()结果:

rank()结果:

排序最好用row_number(),它会为每一行记录生成一个序号,且不会重复

rank()排名如果排序字段重复.则生成的序号也会一样,而且会跳号,如下图: