Oracle开发之分析函数简介Over用法

Oracle开发之分析函数简介Over用法

一、分析函数简介:

在日常的生产环境中,我们接触得比较多的是OLTP系统(即 ),这些系统的特点是具备实时要求oracle定义函数,或者至少说对响应的时间多长有一定的要求;其次这些系统的业务逻辑一般比较复杂,可能需要经过多次的运算。比如我们经常接触到的电子商城。

在这些系统之外,还有一种称之为OLAP的系统(即 ),这些系统一般用于系统决策使用。通常和数据仓库、数据分析、数据挖掘等概念联系在一起。这些系统的特点是数据量大,对实时响应的要求不高或者根本不关注这方面的要求,以查询、统计操作为主。

我们来看看下面的几个典型例子:

①查找上一年度各个销售区域排名前10的员工

②按区域查找上一年度订单总额占区域订单总额20%以上的客户

③查找上一年度销售最差的部门所在的区域

④查找上一年度销售最好和最差的产品

我们看看上面的几个例子就可以感觉到这几个查询和我们日常遇到的查询有些不同,具体有:

①需要对同样的数据进行不同级别的聚合操作

②需要在表内将多条数据和同一条数据进行多次的比较

③需要在排序完的结果集上进行额外的过滤操作

二、分析函数简单实例:

下面我们通过一个实际的例子:按区域查找上一年度订单总额占区域订单总额20%以上的客户,来看看分析函数的应用。

【1】测试环境:

SQL> desc ;

Name Null? Type

———————– ——– —————-

NOT NULL (5)

NOT NULL (5)

NOT NULL (5)

YEAR NOT NULL (4)

MONTH NOT NULL (2)

NOT NULL (7)

NOT NULL (11,2)

【2】测试数据:

SQL> * from ;

YEAR MONTH

———- ———- ————– ———- ———- ———- ———-

11 7 11 2001 7 2 12204

4 5 4 2001 10 2 37802

7 6 7 2001 2 3 3750

10 6 8 2001 1 2 21691

10 6 7 2001 2 3 42624

15 7 12 2000 5 6 24

12 7 9 2000 6 2 50658

1 5 2 2000 3 2 44494

1 5 1 2000 9 2 74864

2 5 4 2000 3 2 35060

2 5 4 2000 4 4 6454

2 5 1 2000 10 4 35580

4 5 4 2000 12 2 39190

13 rows .

【3】测试语句:

SQL> o. ,

o. ,

sum(o.) ,

oracle定义函数

sum(sum(o.)) over( by o.)

from o

where o.year = 2001

group by o.,o.;

———- ———- ———- ————

4 5 37802 37802

7 6 3750 68065

10 6 64315 68065

11 7 12204 12204

三、分析函数OVER解析:

请注意上面的绿色高亮部分,group by的意图很明显:将数据按区域IDoracle定义函数Oracle开发之分析函数简介Over用法,客户进行分组oracle定义函数Oracle开发之分析函数简介Over用法,那么Over这一部分有什么用呢?假如我们只需要统计每个区域每个客户的订单总额,那么我们只需要group by o.,o.就够了。但我们还想在每一行显示该客户所在区域的订单总额,这一点和前面的不同:需要在前面分组的基础上按区域累加。很显然group by和sum是无法做到这一点的(因为聚集操作的级别不一样,前者是对一个客户,后者是对一批客户)。

这就是over函数的作用了!它的作用是告诉sql引擎:按区域对数据进行分区,然后累积每个区域每个客户的订单总额(sum(sum(o.)))。

现在我们已经知道2001年度每个客户及其对应区域的订单总额,那么下面就是筛选那些个人订单总额占到区域订单总额20%以上的大客户了

SQL> *

from ( o. ,

sum(sum(o.)) over( by o.)

from o

where o.year = 2001

group by o.,o.)

where . > . * 0.2;

———- ———- ———- ————

4 5 37802 37802

10 6 64315 68065

11 7 12204 12204

sql>

oracle定义函数

现在我们已经知道这些大客户是谁了!哦,不过这还不够,如果我们想要知道每个大客户所占的订单比例呢?看看下面的sql语句,只需要一个简单的Round函数就搞定了。

SQL> .*,

100 * round( / ,2) || ‘%’

from ( o. ,o.)

where . > . * 0.2;

———- ———- ———- ———— —————————————-

4 5 37802 37802 100%

10 6 64315 68065 94%

11 7 12204 12204 100%

sql>

总结:

①Over函数指明在那些字段上做分析,其内跟 by表示对数据进行分组。注意 by可以有多个字段。

②Over函数可以和其它聚集函数、分析函数搭配,起到不同的作用。例如这里的SUM,还有诸如Rank,等。

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » Oracle开发之分析函数简介Over用法

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们