• Oracle (RANK) 排名函数



    内容来自: Oracle® Database SQL Language Reference 11g Release 2 (11.2) E41084-03。

    empolyees表来自hr方案。


    RANK函数可以计算值在特定排序中的位置(使用聚合语法)及按指定列的值计算排名(使用统计语法)。

    聚合语法的火车图

    image

    下面语句计算了工资$2215和佣金为0.5%的员工在查询结果中排名。

    SELECT RANK(2015, .05) WITHIN GROUP
    (ORDER BY salary, commission_pct) "Rank"
    FROM employees_t;

    查询结果:

          Rank
    ----------
             1

    ORDER BY:指定了排序字段,查询集合只有通过该子句排序,我们才可以获取值在排序好的集合中的位置。

    RANK:该函数的参数数量必须与ORDER BY字段的数量相同。

    DESC、ASC:如果不指定降序(DESC),集合将按照升序(ASC)排列,所以排名既可以按升序也可以按降序排列。

    NULLS FIRST、NULLS LAST:指定NULL值在排列中放在开头还是放在结尾,所以这会影响值排名。

    统计语法的火车图

    image

    该语法适合查询排名前几位或排名后几位的记录

    下面语句可以查询部门60的所有员工的排名,排名按照工资由低到高:

    SELECT department_id, last_name, salary,
    RANK() OVER (PARTITION BY department_id ORDER BY salary ) RANK
    FROM employees_t WHERE department_id = 60
    ORDER BY RANK, last_name;

    查询结果:

    DEPARTMENT_ID LAST_NAME                     SALARY       RANK
    ------------- ------------------------- ---------- ----------
               60 Lorentz                      4200.00          1
               60 Austin                       4800.00          2
               60 Pataballa                    4800.00          2
               60 Ernst                        6000.00          4
               60 Hunold                       9000.00          5

    RANK:不需要指定参数。

    OVER:指定排名对象。
    PARTITION BY:可以分区排名,指定分区字段。

    ORDER BY:与聚合语法中的ORDER BY用法一样。

    在上面的例子中,分别对每个部分中员工进行排名,这里仅显示了部门60。注意,排名号可能不是连续的,如果有两个排名第二的记录,他们的排名号都是2,紧接着则是排名号为4的记录。

    下面是几个使用示例:

    分别选出各部门工资最高的员工:

    select * from (select department_id,salary, rank() over(partition by department_id order by salary desc) rank from employees t) where rank=1;
  • 相关阅读:
    19.SimLogin_case07
    19.SimLogin_case06
    19.SimLogin_case05
    19.SimLogin_case04
    19.SimLogin_case03
    闲说性能测试
    iostat命令详解
    Linux vmstat命令实战详解
    RAC集群节点故障模拟测试
    Oracle RAC功能测试
  • 原文地址:https://www.cnblogs.com/guofeiji/p/5344447.html
Copyright © 2020-2023  润新知