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 ...)用法

Oracle Partition By

Oracle Partition By 的使用

Oracle高级查询之over(partition by..)

Oracle高级查询之over(partition by...)