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