Oracle 分析函数Over(partition by...)以及开窗函数

Over(Partition by...)  为Oracle特有函数,用于计算基于组的某种聚合值。

它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。 

说明

partition by: 按哪个字段划分组;

order by :按哪个字段排序;

rank():跳跃排序,如果有两个第一级时,接下来就是第三级。

dense_rank(): 连续排序,如果有两个第一级时,接下来仍然是第二级。

使用 rank() 和 dense_rank() 时,必须要带order by否则非法

示例:

1. 查询表中每个emptypeid中wages最高的个体。

一般的写法:

select p.* from py_0325 p inner join 
(select max(wages) wages,emptypeid from py_0325 p 
group by p.emptypeid ) des on p.emptypeid = des.emptypeid and p.wages = des.wages

用over()函数

select * from 
(
select p.empid,p.orgid,p.emptypeid,p.wages,
rank() over(partition by p.emptypeid order by p.wages desc) ranks from py_0325 p
) des
where des.ranks = 1 

用dense_over()函数

select * from 
(
select p.empid,p.orgid,p.emptypeid,p.wages,
dense_rank() over(partition by p.emptypeid order by p.wages desc) ranks from py_0325 p
) des
where des.ranks = 1 

2. 查询表中每个emptypeid中wages最高的个体与最低个体的差额。

猜你喜欢

转载自www.cnblogs.com/zhoufei2514/p/10593705.html
今日推荐