浅析oracle开发对使用的分析功能
1。oracle分析功能简介:在日常的生产环境中,我们接触的OLTP(联机事务处理)系统,这些系统的特点是实时性的要求,或者至少是有一定要求的响应时间长;其次,这些系统的业务逻辑一般都比较复杂,可能需要经过一系列的操作的。例如,我们经常接触到的电子商城的接触。
除了这些系统,也有一个系统,称为OLAP(在线探析过程),通常用于系统决策。它通常与数据仓库的概念,相关的数据分析、数据挖掘等。这些系统的特点是数据量大,实时响应或不注意这方面的要求,在所有的需求低。该系统基于查询和统计操作。
让我们来看看下面的典型例子:
找到去年销售地区的前10名员工
(2)根据本区域,客户占去年订单总额的20%以上。
找到去年销售最差的部门所在地。
找到去年最好的和最差的产品
让我们看看上面的一些例子,您可以感觉到这些查询与我们日常的查询有些不同,特别是:
(1)相同的数据需要在不同的层次上进行汇总。
将多个数据与表中多次相同数据进行比较的需要
需要对排序结果集执行额外的过滤操作。
二、oracle分析功能的一个简单示例:
现在我们举一个实际的例子:根据区域查找分析函数的应用,查找去年总面积占总区域订单的20%以上的客户。
(1)测试环境:
复制代码代码如下:SQL> DESC orders_tmp;
名称零式
-----------------------------------------------
cust_nbr不是零号(5)
region_id不是零号(5)
salesperson_id不是零号(5)
年份不是空数字(4)
月非空数字(2)
tot_orders不是零号(7)
tot_sales非空数(11)
(2)测试数据:
复制代码代码如下:SQL SELECT * FROM orders_tmp >;
cust_nbr region_id salesperson_id年月tot_orders tot_sales
--------------------------------------------------------------------------
一千一百七十一兆一千二百亿一千七百二十一万二千二百零四
四百五十四兆二千零一亿一千零二十三万七千八百零二
七兆六千七百二十亿零一百二十三万三千七百五十
一百零六兆八千二百亿一千一百二十二万一千六百九十一
一百零六兆七千二百亿一千二百三十四万二千六百二十四
一兆五千七百一十二亿二千万五千六百二十四
一百二十七兆九千二百亿零六百二十五万零六百五十八
十五兆二千二百亿零三百二十四万四千四百九十四
十五兆一千二百亿零九百二十七万四千八百六十四
二十五兆四千二百亿零三百二十三万五千零六十
二兆五千四百二十亿零四十四万六千四百五十四
二百五十一兆二千亿一千零四十三万五千五百八十
四百五十四兆二千亿一千二百二十三万九千一百九十
选择13行。
(3)测试语句:
复制代码代码如下:SQL >选择o.cust_nbr客户,
o.region_id区,
和(o.tot_sales)cust_sales,
金额(金额(o.tot_sales))在(分区o.region_id)region_sales
从orders_tmp O
在o.year = 2001
集团通过o.region_id,o.cust_nbr;
客户区cust_sales region_sales
------------------------------------------
四千五百三十七亿八千零二十三万七千八百零二
七百六十三亿七千五百零六万八千零六十五
一兆零六百六十四亿三千一百五十六万八千零六十五
一兆一千七百一十二亿二千零四十一万二千二百零四
三。解析功能分析:
请注意上面的绿色突出部分。分组的意图是显而易见的:当数据按区域id和客户分组时,那么多部分的使用是什么呢如果我们只需要在每个地区的每个客户的订单总金额数,那么我们只需要通过o.region_id组,和o.cust_nbr是足够的。但我们也要展示的订单总额在每个客户的区域中的每一行,这是与以往不同的是:我们需要积累对前面的分组的基础上,明确集团和不能这样做(因为聚集操作的水平是不同的,前者是一个客户,后者是一组客户)。
这是超函数的函数!它的作用是告诉SQL引擎,数据的分区,然后在每个区域的总订单金额(金额(金额按客户(o.tot_sales))积累。
现在我们知道每个客户的订单总量和相应的区域在2001,然后是选择占区域订单总数的20%以上的主要客户。
复制代码代码如下:
从o.cust_nbr(选择客户,
o.region_id区,
和(o.tot_sales)cust_sales,
金额(金额(o.tot_sales))在(分区o.region_id)region_sales
从orders_tmp O
在o.year = 2001
集团通过o.region_id,o.cust_nbr)all_sales
在all_sales.cust_sales > all_sales.region_sales * 0.2;
客户区cust_sales region_sales
------------------------------------------
四千五百三十七亿八千零二十三万七千八百零二
一兆零六百六十四亿三千一百五十六万八千零六十五
一兆一千七百一十二亿二千零四十一万二千二百零四
SQL >
现在我们知道这些大客户是谁了!哦,但那还不够。如果我们想知道每个大客户的比例,订单的比例是多少请看下面的SQL语句,只需要一个简单的圆函数就可以了。
复制代码代码如下:SQL >选择all_sales *,
100轮(cust_sales / region_sales,2)| | %
从o.cust_nbr(选择客户,
o.region_id区,
和(o.tot_sales)cust_sales,
金额(金额(o.tot_sales))在(分区o.region_id)region_sales
从orders_tmp O
在o.year = 2001
集团通过o.region_id,o.cust_nbr)all_sales
在all_sales.cust_sales > all_sales.region_sales * 0.2;
客户区cust_sales region_sales %
----------------------------------------------------------------------------------
453780237802100%
106643156806594%
1171220412204100%
SQL >
总结:
(1)过度函数表示对这些字段进行分析,并将数据与分区分组。
(2)的功能可以发挥不同的作用,与其他聚合函数和分析功能。例如,和这里,以及排名,dense_rank,等等。