• Oracle rank和dense_rank排名函数


    1.rank函数

    rank计算一组值的排名,返回数字类型。排名可能是不连续。如果有5人,其中有2个人排名第一,则rank返回的排名结果为:1 1 3 4 5。

    • 作为一个聚合函数,返回虚拟行在样表中的排名。
    • 作为一个解析函数,返回每一个的排名。

    1.1聚合函数语法

    1.2解析函数语法

    1.3聚合函数的例子

    计算假定薪水为2000的员工在样表中的排名。

    SQL> select rank(2000) within group(order by e.sal desc) "Rank"
      2    from emp e;
     
          Rank
    ----------
             7

    假定薪水为2000的员工,按照薪水从高到低在样表中排第7名。

    1.4解析函数的例子

    按照薪水从高到低进行排名:

    SQL> select e.ename, e.sal, rank() over(order by e.sal desc) "Rank" from emp e;
     
    ENAME            SAL       Rank
    ---------- --------- ----------
    KING         5000.00          1
    FORD         3000.00          2
    SCOTT        3000.00          2

    JONES        2975.00          4
    BLAKE        2850.00          5
    CLARK        2450.00          6
    ALLEN        1600.00          7
    TURNER       1500.00          8
    MILLER       1300.00          9
    WARD         1250.00         10
    MARTIN       1250.00         10

    ADAMS        1100.00         12
    JAMES         950.00         13
    SMITH         800.00         14

    薪水为3000重复,并列排名第2,跳过第3.

    在部内进行薪水从高到低的排名:

    SQL> select e.ename,
      2         e.sal,
      3         e.deptno,
      4         rank() over(partition by e.deptno order by e.sal desc) "Rank"
      5    from emp e;
     
    ENAME            SAL DEPTNO       Rank
    ---------- --------- ------ ----------
    KING         5000.00     10          1
    CLARK        2450.00     10          2
    MILLER       1300.00     10          3
    SCOTT        3000.00     20          1
    FORD         3000.00     20          1
    JONES        2975.00     20          3
    ADAMS        1100.00     20          4
    SMITH         800.00     20          5
    BLAKE        2850.00     30          1
    ALLEN        1600.00     30          2
    TURNER       1500.00     30          3
    MARTIN       1250.00     30          4
    WARD         1250.00     30          4
    JAMES         950.00     30          6

    2.dense_rank函数

    dense_rank计算一组值的排名,该排名是连续整数从1开始。如果有5人,其中有2个人排名第一,则rank返回的排名结果为:1 1 2 3 4。

    • 作为一个聚合函数,返回虚拟行在样表中的排名。
    • 作为一个解析函数,返回每一个的排名。

    2.1聚合函数语法

    2.2解析函数语法

    2.3聚合函数的例子

    计算假定薪水为2000的员工在样表中的排名。

    SQL> select dense_rank(2000) within group(order by e.sal desc) "Rank"
      2    from emp e;
     
          Rank
    ----------
             6

    假定薪水为2000的员工,按照薪水从高到低在样表中排第7名。

    2.4解析函数的例子

    按照薪水从高到低进行排名:

    SQL> select e.ename,
      2         e.sal,
      3         dense_rank() over(order by e.sal desc) "Rank"
      4    from emp e;
     
    ENAME            SAL       Rank
    ---------- --------- ----------
    KING         5000.00          1
    FORD         3000.00          2
    SCOTT        3000.00          2
    JONES        2975.00          3

    BLAKE        2850.00          4
    CLARK        2450.00          5
    ALLEN        1600.00          6
    TURNER       1500.00          7
    MILLER       1300.00          8
    WARD         1250.00          9
    MARTIN       1250.00          9
    ADAMS        1100.00         10

    JAMES         950.00         11
    SMITH         800.00         12

    有两个1250并列排名第8,接着1100是第9。排名是连续是连续的。

    在部内进行薪水从高到低的排名:

    SQL> select e.ename,
      2         e.sal,
      3         e.deptno,
      4         dense_rank() over(partition by e.deptno order by e.sal desc) "Rank"
      5    from emp e;
     
    ENAME            SAL DEPTNO       Rank
    ---------- --------- ------ ----------
    KING         5000.00     10          1
    CLARK        2450.00     10          2
    MILLER       1300.00     10          3
    SCOTT        3000.00     20          1
    FORD         3000.00     20          1
    JONES        2975.00     20          2
    ADAMS        1100.00     20          3

    SMITH         800.00     20          4
    BLAKE        2850.00     30          1
    ALLEN        1600.00     30          2
    TURNER       1500.00     30          3
    MARTIN       1250.00     30          4
    WARD         1250.00     30          4
    JAMES         950.00     30          5

    20部门有两个3000并列排名第一,接着2975是第二。排名是连续是连续的。

  • 相关阅读:
    Java使用默认浏览器打开指定URL
    eclipse.ini内存设置
    Eclipse关联Java源代码
    C#调用Java代码
    UVA12161 Ironman Race in Treeland
    [JSOI2012]玄武密码
    着色问题
    luogu P2680 运输计划
    [BJWC2010]严格次小生成树
    [SDOI2015]异象石
  • 原文地址:https://www.cnblogs.com/riasky/p/3468875.html
Copyright © 2020-2023  润新知