Oracle分析函数二——函数用法

 Oracle分析函数实际上操作对象是查询出的数据集,也就是说不需二次查询数据库,实际上就是oracle实现了一些我们自身需要编码实现的统计功能,对于简化开发工作量有很大的帮助,特别在开发第三方报表软件时是非常有帮助的。Oracle8.1.6开始提供分析函数。

oracle分析函数的语法:

function_name(arg1,arg2,...)

over

(<partition-clause> <order-by-clause ><windowing clause>)

     说明:

1. partition-clause 数据记录集分组

2. order-by-clause  数据记录集排序

3. windowing clause 功能非常强大、比较复杂,定义分析函数在操作行的集合。有三种开窗方式: rangerowspecifying

 

--Partition by,按相应的值(manager_id)进行分组统计 select manager_id, first_name || ' ' || last_name employee_name, hire_date, salary, avg(salary) over(partition by manager_id) avg_salary from employees;

Oracle分析函数二——函数用法_第1张图片

--等同于上面 select a.manager_id, a.employee_name, a.hire_date, a.salary, b.avg_salary from (select manager_id, first_name || ' ' || last_name employee_name, hire_date, salary from employees) a, (select manager_id, avg(salary) avg_salary from employees group by manager_id) b where a.manager_id = b.manager_id order by a.manager_id; --Order by按相应的值(hire_date)进行排序并累计统计 select manager_id, first_name || ' ' || last_name employee_name, hire_date, salary, avg(salary) over(order by hire_date) from employees;

Oracle分析函数二——函数用法_第2张图片

--Partition by Order by首先按相应的值(manager_id,hire_date)排序,并按order by的值(hire_date)进行累计统计 select manager_id, first_name || ' ' || last_name employee_name, hire_date, salary, avg(salary) over(partition by manager_id order by hire_date) from employees;

 --Partition by Order by首先按相应的值(manager_id,hire_date)排序,并按order by的值(hire_date)进行累计统计 --该平均值由当前员工和与之具有相同经理的前一个和后两个三者的平均数得来 select manager_id, first_name || ' ' || last_name employee_name, hire_date, salary, avg(salary) over(partition by manager_id order by hire_date rows between 1 preceding and 2 following) from employees;

 

Oracle分析函数二——函数用法_第3张图片 

--Partition by Order by首先按相应的值(manager_id,hire_date)排序,并按order by的值(hire_date)进行累计统计 --该平均值由当前员工和与之具有相同经理,并且雇用时间在该员工时间之前的50天以内和在该员工之后的150天之内员工的薪水的平均值 --range为取值范围,估计只有数字和日期能够进行取值了 select manager_id, first_name || ' ' || last_name employee_name, hire_date, salary, avg(salary) over(partition by manager_id order by hire_date range between 50 preceding and 150 following) from employees;   

Oracle分析函数二——函数用法_第4张图片 

--Partition by Order by首先按相应的值(manager_id,hire_date)排序,并按order by的值(hire_date)进行累计统计 --该平均值由当前员工和与之具有相同经理的平均值 --每行对应的数据窗口是从第一行到最后一行 select manager_id, first_name || ' ' || last_name employee_name, hire_date, salary, avg(salary) over(partition by manager_id order by hire_date) avg_salary_part_order, avg(salary) over(partition by manager_id) avg_salary_order, avg(salary) over(partition by manager_id order by hire_date range between unbounded preceding and unbounded following) avg_salary_unbound1, --等同于仅partition时候的值 avg(salary) over(partition by manager_id order by hire_date rows between unbounded preceding and unbounded following) avg_salary_unbound2 --等同于上面 from employees;   

Oracle分析函数二——函数用法_第5张图片

你可能感兴趣的:(oracle,Date,数据库,function,manager,报表)