当前位置:数据库 > Oracle >>

oracle分析函数RANK()

oracle分析函数RANK()

RANK()既是一个聚合函数,也是一个分析函数 

其具体的语法如下: 

聚合函数语法: 

 


分析函数的语法: 

 


RANK计算的是一个组值中每个值的等级,返回的是整数 

作为聚合函数时,例子如下: 
SELECT RANK(1250, 30) WITHIN GROUP(ORDER BY sal,deptno) "Rank" FROM emp; 

  Rank 
---------- 
  3 

上面SQL表示的意思是:sal 为1250,并且deptno为30的记录,通过sal,deptno排序后所在的位置。 

原表的结果如下: 

SQL> select * from emp order by sal,deptno; 

  EMPNO ENAME  JOB  MGR HIREDATE  SAL  COMM  DEPTNO 
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  7900 JAMES  CLERK  7698 03-DEC-81  950  30 
  7369 SMITH  CLERK  7902 17-DEC-80  1064.8  20 
  7521 WARD  SALESMAN  7698 22-FEB-81  1250  500  30 
  7654 MARTIN  SALESMAN  7698 28-SEP-81  1250  1400  30 
  7876 ADAMS  CLERK  7788 23-MAY-87  1464.1  20 
  7844 TURNER  SALESMAN  7698 08-SEP-81  1500  0  30 
  7499 ALLEN  SALESMAN  7698 20-FEB-81  1600  300  30 
  7934 MILLER  CLERK  7782 23-JAN-82  1730.3  10 
  7698 BLAKE  MANAGER  7839 01-MAY-81  2850  30 
  7782 CLARK  MANAGER  7839 09-JUN-81  3260.95  10 
  7566 JONES  MANAGER  7839 02-APR-81  3959.73  20 

  EMPNO ENAME  JOB  MGR HIREDATE  SAL  COMM  DEPTNO 
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  7788 SCOTT  ANALYST  7566 19-APR-87  3993  20 
  7902 FORD  ANALYST  7566 03-DEC-81  3993  20 
  7839 KING  PRESIDENT  17-NOV-81  6655  10 

14 rows selected. 


作为分析函数使用时,其意思是分析每个记录的排序或等级,rank()值相同时排名相同,其后排名跳跃不连续 

SQL> select * 
  2  from (  select deptno, 
  3  rank() over(partition by deptno order by sal desc) rw, 
  4  ename, sal 
  5  from emp  )  where rw <= 4; 

  DEPTNO  RW ENAME  SAL 
---------- ---------- ---------- ---------- 
  10  1 KING  6655 
  10  2 CLARK  3260.95 
  10  3 MILLER  1730.3 
  20  1 SCOTT  3993 
  20  1 FORD  3993 
  20  3 JONES  3959.73 
  20  4 ADAMS  1464.1 
  30  1 BLAKE  2850 
  30  2 ALLEN  1600 
  30  3 TURNER  1500 
  30  4 WARD  1250 

  DEPTNO  RW ENAME  SAL 
---------- ---------- ---------- ---------- 
  30  4 MARTIN  1250 

12 rows selected. 

注意:作为分析函数时,与DENSE_RANK()和ROW_NUMBER()的区别。 

dense_rank()值相同时排名相同,其后排名连续不跳跃 

row_number()值相同时排名不相等,其后排名连续不跳跃
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,