Oracle Partition By
Posted wangrui1587165
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle Partition By相关的知识,希望对你有一定的参考价值。
/* Parttion by 关键字是Oracle中分析性函数的一部分, 它和聚合函数不同的地方在于它能够返回一个分组中的多条记录, 而聚合函数一般只有一条反映统计值的结果。 */ --示例查询出每个部门工资最低的员工编号【每个部门可能有多个最低的工资员工】 create table tsaler( userid varchar(10), salary number, deptid varchar(1) ); insert into tsaler(userid, salary, deptid) values(‘1‘, ‘200‘, ‘1‘); insert into tsaler(userid, salary, deptid) values(‘2‘, ‘2000‘, ‘1‘); insert into tsaler(userid, salary, deptid) values(‘3‘, ‘200‘, ‘1‘); insert into tsaler(userid, salary, deptid) values(‘4‘, ‘1000‘, ‘2‘); insert into tsaler(userid, salary, deptid) values(‘5‘, ‘1000‘, ‘2‘); insert into tsaler(userid, salary, deptid) values(‘6‘, ‘3000‘, ‘2‘); commit; --方法一 select tsaler.* from tsaler inner join (select min(salary) as salary, deptid from tsaler group by deptid) c on tsaler.salary = c.salary and tsaler.deptid = c.deptid; --方法二 select * from tsaler inner join (select min(salary) as salary, deptid from tsaler group by deptid) c using (salary, deptid); --方法三 --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; --① 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 Partition By的主要内容,如果未能解决你的问题,请参考以下文章
oracle下的OVER(PARTITION BY)函数介绍
oracle查询中over(partition by ...order by ...)用法