Welcome 微信登录

首页 / 数据库 / MySQL / Oracle Partition By 的使用

1.概述

Parttion by 关键字是Oracle中分析性函数的一部分,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,儿聚合函数一般只有一条反映统计值的结果。 

2.使用方式 

   场景:查询出每个部门工资最低的员工编号【每个部门可能有两个最低的工资员工】  create table TSALER(userid NUMBER(10),salary NUMBER(10),deptid NUMBER(10))-- Add comments to the columns comment on column TSALER.useridis "员工ID";comment on column TSALER.salaryis "工资";comment on column TSALER.deptidis "部门ID";insert into TSALER (工号, 工资, 部门编号)values (1, 200, 1);insert into TSALER (工号, 工资, 部门编号)values (2, 2000, 1);insert into TSALER (工号, 工资, 部门编号)values (3, 200, 1);insert into TSALER (工号, 工资, 部门编号)values (4, 1000, 2);insert into TSALER (工号, 工资, 部门编号)values (5, 1000, 2);insert into TSALER (工号, 工资, 部门编号)values (6, 3000, 2);View Code  查询结果:

2.1方法一

select tsaler.* from tsaler inner join(select min(salary) as salary,deptid from tsaler group by deptid) con tsaler.salary=c.salary and tsaler.deptid=c.deptid

2.2方法二

select * from tsaler inner join(select min(salary) as salary,deptid from tsaler group by deptid) cusing(salary,deptid)

2.3方法三

--row_number() 顺序排序select row_number() over(partition by deptid order by salary) my_rank ,deptid,USERID,salary from tsaler;--rank() (跳跃排序,如果有两个第一级别时,接下来是第三级别)select rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler;--dense_rank()(连续排序,如果有两个第一级别时,接下来是第二级)select dense_rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler;-------方案3解决方案select * from (select rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler) where my_rank=1;select * from (select dense_rank() over(partition by deptid order by salary) my_rank,deptid,USERID,salary from tsaler) where my_rank=1;更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址