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