Oracle 从 8.1.6 开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的
不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。
一、 over 函数
over 函数指定了分析函数工作的数据窗口的大小,这个数据窗口大小可能会随着行的变化
而变化,例如:
over(order by salary)按照 salary 排序进行累计,order by 是个默认的开窗函数
over(partition by deptno) 按照部门分区
over(order by salary range between 50 preceding and 150 following)每行对应的数据窗口是之前
行幅度值不超过 50,之后行幅度值不超过 150 的数据记录
over(order by salary rows between 50 perceding and 150 following)前 50 行,后 150 行
over(order by salary rows between unbounded preceding and unbounded following)所有行
over(order by salary range between unbounded preceding and unbounded following)所有行
二、 sum 函数
功能描述:该函数计算组中表达式的累积和。
SAMPLE:下例计算同一经理下员工的薪水累积值
SELECT manager_id, last_name, salary,
SUM (salary) OVER (PARTITION BY manager_id ORDER BY salary
RANGE UNBOUNDED PRECEDING) l_csum
FROM employees
WHERE manager_id in (101,103,108);
三、 应用实例
1, 测试环境设置
设有销售表 t_sales (subcompany,branch,region,customer,sale_qty); 存储客户的销售明细,记
录如下所示。
Subcompany Branch Region Customer Sale_qty
北京分公司 北京经营部 片区 1 客户 1
1
北京分公司 北京经营部 片区 1 客户 1
1
北京分公司 北京经营部 片区 1 客户 2
1
北京分公司 北京经营部 片区 1 客户 2
1
北京分公司 北京经营部 片区 2 客户 1
1
北京分公司 北京经营部 片区 2 客户 1
1
北京分公司 北京经营部 片区 2 客户 2
1
北京分公司 北京经营部 片区 2 客户 2
1
北京分公司 其他经营部 片区 1 客户 1
1
北京分公司 其他经营部 片区 1 客户 1
1
北京分公司 其他经营部 片区 1 客户 2
1
北京分公司 其他经营部 片区 1 客户 2
1
北京分公司 其他经营部 片区 2 客户 1
1
北京分公司 其他经营部 片区 2 客户 1
1
北京分公司 其他经营部 片区 2 客户 2
1
北京分公司 其他经营部 片区 2 客户 2
1
create table t_sales(
评论1