Oracle 开窗函数

2021年06月08日 209点热度 0人点赞 0条评论

开窗函数

开窗函数也属于分析函数

分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。
开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化

函数说明

oracle开窗函数有很多,用的比较多的是over(...),使用的话一般是和order、partition by、row_number()、rank()、dense_rank()几个函数一起使用

count 一起使用

select  name , city , salary ,count(*) over ()
from    student
where   salary < 4000


开窗函数count(*)over( )是对查询结果的每一行都返回所有符合条件行的条数;
over关键字后的括号中的选项为空,则开窗函数会对结果集中的所有行进行聚合运算;
over关键字后的括号中的选项为不为空,则按照括号中的范围进行聚合运算。

partition by:分区子句,根据分区表达式的条件逻辑将单个结果集分成N组

select name,
       city,
       age,
       salary,
       count(*) over(partition by city) 相同城市人数,
       count(*) over(partition by age)  相同年龄人数
from   student

order by子句:排序子句,用于对分区中的数据进行排序

row:按照行定位的

select name,
       city,
       age,
       salary,
       sum(salary) over(order by salary rows between unbounded preceding and current row)
from   student

range:按照范围定位的
案例:查询从第一行到当前行的工资总和

select fname,
       fcity,
       fage,
       fsalary,
       sum(fsalary) over(order by fsalary range between unbounded preceding and current row) from t_person

浮生一程

读书-行路-悦人-识物