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.userid
  is '员工ID';
comment on column TSALER.salary
  is '工资';
comment on column TSALER.deptid
  is '部门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);
复制代码
复制代码

  

查询结果:

2.1方法一

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 

2.2方法二

select * from tsaler 
inner join(select min(salary) as salary,deptid from tsaler group by deptid) c
using(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;
复制代码
复制代码
posted @   lclc  阅读(448)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示