Oracle分析函数详解:开窗函数与 AVG 案例

需积分: 0 0 下载量 197 浏览量 更新于2024-07-22 收藏 124KB DOC 举报
"这篇文档主要介绍了Oracle数据库中的分析函数,特别是开窗函数的使用,以及 AVG 函数的应用示例。" 在Oracle数据库中,分析函数是一个强大的工具,它允许你在处理数据时执行更复杂的聚合操作。自Oracle 8.1.6版本起,这些函数就被引入,它们的主要区别于传统的聚合函数(如 SUM, COUNT, AVG 等),在于分析函数可以为每个分组返回多行结果,而聚合函数通常仅返回一行。 分析函数的核心概念是数据窗口(Window)。数据窗口定义了在计算聚合值时考虑的行集。例如,`OVER (ORDER BY salary)` 将根据薪水对数据进行排序并进行分析,`OVER (PARTITION BY deptno)` 则会按部门划分数据窗口。更复杂的数据窗口定义可以通过 `RANGE` 和 `ROWS BETWEEN` 子句来指定,如 `RANGE BETWEEN 50 PRECEDING AND 150 FOLLOWING` 或 `ROWS BETWEEN 50 PRECEDING AND 150 FOLLOWING`,它们分别基于行值的范围或绝对行号来定义窗口。 `AVG` 是一个常见的分析函数,用于计算一组或数据窗口内某个表达式的平均值。在提供的示例中,展示了如何使用 `AVG` 来计算员工表中每个员工的平均薪水报告。这个特定的计算不仅考虑当前员工的薪水,还考虑与他有相同经理的前一个和后一个员工的薪水,从而得到一个加权平均值。示例查询可能如下: ```sql SELECT manager_id, last_name, hire_date, sal, AVG(sal) OVER ( PARTITION BY manager_id ORDER BY sal ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS c_mavg FROM employees ``` 在这个查询中,`AVG(sal)` 被应用在一个窗口上,窗口包括当前行(当前员工)以及相同经理的前一行和后一行。`PARTITION BY manager_id` 按经理分组,`ORDER BY sal` 按薪水排序,`ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING` 定义了考虑的行范围。 理解并熟练运用Oracle的分析函数,可以极大地提升数据分析和报表生成的效率。Tom Kyte 的《Expert one-on-one》和 Oracle 的官方文档《Oracle9i SQL Reference》第6章是深入学习这些高级功能的宝贵资源。