Oracle分析函数用法(二)

Oracle分析函数——函数用法

Oracle分析函数实际上操作对象是查询出的数据集,也就是说不需二次查询数据库,实际上就是oracle实现了一些我们自身需要编码实现的统计功能,对于简化开发工作量有很大的帮助,特别在开发第三方报表软件时是非常有帮助的。Oracle从8.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  功能非常强大、比较复杂,定义分析函数在操作行的集合。有三种开窗方式: range、row、specifying。

--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;

--等同于上面

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;

--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;

--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;

--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;

获取更多详细资料

时间: 2024-11-03 22:32:08

Oracle分析函数用法(二)的相关文章

oracle分析函数 (转)

一.总体介绍 12.1 分析函数如何工作 语法 FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达式,…> <ORDER BY 表达式 <ASC DESC> <NULLS FIRST NULLS LAST>> <WINDOWING子句>) PARTITION子句 ORDER BY子句 WINDOWING子句 缺省时相当于RANGE UNBOUNDED PRECEDING 1. 值域窗(RANGE

Oracle分析函数Over()

一.Over()分析函数 说明:聚合函数(如sum().max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回一行记录.若想对于某组返回多行记录,则需要使用分析函数. 1.rank()/dense_rank over(partition by ... order by ...) 说明:over()在什么条件之上; partition by 按哪个字段划分组: order by 按哪个字段排序: 注意: (1)使用rank()/dense_rank() 时,必须要带order b

[转]oracle分析函数Rank, Dense_rank, row_number

oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number)   目录 =============================================== 1.使用rownum为记录排名 2.使用分析函数来为记录排名 3.使用分析函数为记录进行分组排名 一.使用rownum为记录排名: 在前面一篇<Oracle开发专题之:分析函数>,我们认识了分析函数的基本应用,现在我们再来考虑下面几个问题:

[转]oracle 分析函数over

  oracle 分析函数over 分析函数(OVER) 目录: =============================================== 1.Oracle分析函数简介 2. Oracle分析函数简单实例 3.分析函数OVER解析 一.Oracle分析函数简介: 在日常的生产环境中,我们接触得比较多的是OLTP系统(即Online Transaction Process),这些系统的特点是具备实时要求,或者至少说对响应的时间多长有一定的要求:其次这些系统的业务逻辑一般比较复

Oracle分析函数(一)

一.总体介绍 分析函数如何工作 语法 FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达式,…> <ORDER BY 表达式 <ASC DESC> <NULLS FIRST NULLS LAST>> <WINDOWING子句>) PARTITION子句 ORDER BY子句 WINDOWING子句 缺省时相当于RANGE UNBOUNDED PRECEDING 1. 值域窗(RANGE WINDO

ORACLE基本用法

ORACLE基本用法 作为企业版的后台数据支撑,就首先要掌握oracle的使用方法!!! 注册用户之前,需要使用system管理员来进行注册功能!!! 1.首先创建新用户 2.这样就能使创建的新用户能够登陆吗?不,还需要分配权限 这样我们就能使用新的用户名来登陆了,我们来检索一下该用户下的表数据 二.使用MyEcplicse连接oracle 步骤一:window->show view->other->在文本框输入db,选择dbBrower. 页面如下: 右键新建,配置如下 完成!!! 三

oracle分析函数技术详解(配上开窗函数over())

一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值. 分析函数和聚合函数的不同之处是什么?普通的聚合函数用group by分组,每个分组返回一个统计值,而分析函数采用partition by分组,并且每组每行都可以返回一个统计值. 分析函数的形式分析函数带有一个开窗函数over(),包含三个分析子句:分组(partition by), 排序(or

Oracle触发器用法实例详解

本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行. 因此触发器不需要人为的去调用,也不能调用. 然后,触发器的触发条件其实在你定义的时候就已经设定好了. 这里面需要说明一下,触发器可以分为语句级触发器和行级触发器. 详细的介绍可以参考网上的资料,简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发.而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次. 具体举例

学习oracle数据库引航二——后台进程

from 谭怀远--数据库领航 后台进程 一.system monitor(SMON) (非正常关闭后的)实例恢复 二.process monitor(PMON) 回滚事务 释放锁及其它资源 重启死掉的调度器.(在共享服务器中用).分配用户连到哪个服务器上. 在监听器中注册服务信息 三.DBWn和LGWR DBWRn下写入磁盘文件 四.check point(CKPT) 喊DBWn写脏数据 完后会更新DATAFILE的HEADER和控制文件的HEADER.而HEADER中有同步所需要的信息,即C