码迷,mamicode.com
首页 > 数据库 > 详细

Oracle-- (RANK) 排名函数

时间:2016-04-01 12:48:11      阅读:321      评论:0      收藏:0      [点我收藏+]

标签:


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

empolyees表来自hr方案。


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

聚合语法的火车图

技术分享

下面语句计算了工资$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值在排列中放在开头还是放在结尾,所以这会影响值排名。

 

统计语法的火车图

技术分享

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

下面语句可以查询部门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的记录。

Oracle-- (RANK) 排名函数

标签:

原文地址:http://www.cnblogs.com/guofeiji/p/5344447.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!