Row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。 

Dense_rank函数返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。 

Rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。


用SCOTT/TIGER登录。


查询表EMP:

SELECT * FROM EMP;



结果:

oracle 分析函数 RANK、DENSE_RANK、ROW_NUMBER_函数返回


创建EMP的副本EMP1:

CREATE TABLE EMP1 AS SELECT * FROM EMP;



然后修改一些数据:

UPDATE EMP1 SET SAL=6000 WHERE EMPNO=7839;
UPDATE EMP1 SET SAL=2000 WHERE EMPNO=7499;
COMMIT;



查询表EMP1:

SELECT * FROM EMP1;



结果:

oracle 分析函数 RANK、DENSE_RANK、ROW_NUMBER_分析函数_02


然后用分析函数查询:

SELECT JOB, SUM(SAL), RANK() OVER (ORDER BY SUM(SAL) ASC), 
DENSE_RANK() OVER (ORDER BY SUM(SAL) ASC), 
ROW_NUMBER() OVER (ORDER BY SUM(SAL) ASC) 
FROM EMP1 GROUP BY JOB;



结果:

oracle 分析函数 RANK、DENSE_RANK、ROW_NUMBER_分析函数_03