oracle rank 语法_Oracle-- (RANK) 排名函数

本文介绍了Oracle数据库中的RANK函数,包括聚合语法和统计语法的使用。RANK函数可用于计算值在特定排序中的位置或按指定列进行排名。文中展示了如何根据工资和佣金计算员工排名,以及如何按部门对员工工资进行排名。同时提供了示例查询,如选取各部门工资最高的员工。
摘要由CSDN通过智能技术生成

内容来自: 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 BYsalary, commission_pct) "Rank"FROM employees_t;

查询结果:

Rank----------

1

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

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

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

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

统计语法的火车图:

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

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

SELECTdepartment_id, last_name, salary,

RANK()OVER (PARTITION BY department_id ORDER BYsalary ) RANKFROM 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值