数据库初级培训(第2讲).ppt
《数据库初级培训(第2讲).ppt》由会员分享,可在线阅读,更多相关《数据库初级培训(第2讲).ppt(69页珍藏版)》请在三一办公上搜索。
1、数据库基础培训(第二讲),上海全成通信技术有限公司 2012-09 金刚(),培训大纲,一、分析函数 二、GROUP BY扩展 三、其它特性,Oracle 分析函数,简介OLAP的系统(即Online Aanalyse Process),这些系统一般用于系统决策使用。通常和数据仓库、数据分析、数据挖掘等概念联系在一起。这些系统的特点是数据量大,对实时响应的要求不高或者根本不关注这方面的要求,以查询、统计操作为主。我们来看看下面的几个典型例子:查找上一年度各个销售区域排名前10的员工按区域查找上一年度订单总额占区域订单总额20%以上的客户查找上一年度销售最差的部门所在的区域查找上一年度销售最好和
2、最差的产品 我们看看上面的几个例子就可以感觉到这几个查询和我们日常遇到的查询有些不同,具体有:需要对同样的数据进行不同级别的聚合操作需要在表内将多条数据和同一条数据进行多次的比较需要在排序完的结果集上进行额外的过滤操作,3,Oracle 分析函数,分析函数语法 FUNCTION_NAME(,.)OVER()例:sum(sal)over(partition by deptno order by ename)sum就是函数名sal是分析函数的参数,每个函数有03个参数,参数可以是表达式,例如:sum(sal+comm)over 是一个关键字,用于标识分析函数,否则查询分析器不能区别sum()聚集函
3、数和sum()分析函数partition by deptno 是可选的分区子句,如果不存在任何分区子句,则全部的结果集可看作一个单一的分区order by ename 是可选的order by 子句,有些函数需要它,有些则不需要.依靠已排序数据的那些函数,如:用于访问结果集中前一行和后一行的LAG和LEAD,必须使用;其它函数,如AVG,则不需要.在使用了任何排序的开窗函数时,该子句是强制性的,它指定了在计算分析函数时一组内的数据是如何排序的.,4,Oracle 分析函数,1)FUNCTION子句 ORACLE提供了26个分析函数,按功能分5类:等级(ranking)函数:用于寻找前N个排名开
4、窗(windowing)函数:用于计算不同的累计,如SUM,COUNT,AVG,MIN,MAX等,作用于数据的一个窗口上 例:sum(t.sal)over(order by t.deptno,t.ename)running_total,sum(t.sal)over(partition by t.deptno order by t.ename)department_total,5,Oracle 分析函数,1)FUNCTION子句 制表(reporting)函数:与开窗函数同名,作用于一个分区或一组上的所有列,例:sum(t.sal)over()running_total2,sum(t.sal)o
5、ver(partition by t.deptno)department_total2制表函数与开窗函数的关键不同之处在于OVER语句上缺少一个ORDER BY子句!LAG,LEAD函数:这类函数允许在结果集中向前或向后检索值,为了避免数据的自连接,它们是非常有用的.VAR_POP,VAR_SAMP,STDEV_POP,STDDEV_SAMP,STDDEV及线性回归函数:计算任何未排序分区的统计值,6,功能描述:开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化例子:over(order by salary)按照salary排序进行累计,order by是个默认
6、的开窗函数 over(order by salary range between 50 preceding and 150 following)每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150 over(order by salary rows between 50 preceding and 150 following)每行对应的数据窗口是之前50行(含),之后150行(含)over(order by salary rows between unbounded preceding and unbounded following)每行对应的数据窗口是从第一行到最后一行,等效
7、:over(order by salary range between unbounded preceding and unbounded following),OVER,Oracle 分析函数,2)PARTITION子句 按照表达式分区(就是分组),如果省略了分区子句,则全部的结果集被看作是一个单一的组 3)ORDER BY子句分析函数中ORDERBY的存在将添加一个默认的开窗子句,这意味着计算中所使用的行的集合是当前分区中当前行和前面所有行,没有ORDER BY时,默认的窗口是全部的分区在Order by 子句后可以添加nulls last,如:order by comm desc nul
8、ls last表示排序时空值放在最后 nulls first|nulls last允许指定NULLS是出现在开始还是最后。,8,SQL select ename,sal,avg(sal)over()from emp;ENAME SAL AVG(SAL)OVER()-SMITH 800.00 2077.083333333ALLEN 1600.00 2077.083333333WARD 1250.00 2077.083333333JONES 2975.00 2077.083333333MARTIN 1250.00 2077.083333333BLAKE 2850.00 2077.083333333
9、CLARK 2450.00 2077.083333333KING 5000.00 2077.083333333TURNER 1500.00 2077.083333333JAMES 950.00 2077.083333333FORD 3000.00 2077.083333333MILLER 1300.00 2077.083333333,Order By 子句,在没有Order by子句时,在全部组上计算平均值,每一行给一个同样的值。在用带有Order by的AVG()时,每一行的平均值是那一行与前面所有行的平均值(此处用作开窗函数),select ename,deptno,sum(sal)ove
10、r(order by ename,deptno)sum_ename_deptno,sum(sal)over(order by deptno,ename)sum_deptno_enamefrom emporder by ename,deptnoENAME DEPTNO SUM_ENAME_DEPTNO SUM_DEPTNO_ENAME-ADAMS 20 1100 7400ALLEN 30 2700 23739.5BLAKE 30 5550 26589.5CLARK 20 8514.5 10364.5FORD 20 12514.5 14364.5JAMES 30 13464.5 27539.5JO
11、NES 20 16439.5 17339.5KING 10 21439.5 5000MARTIN 30 22689.5 28789.5MILLER 10 23989.5 6300SCOTT 20 27989.5 21339.5SMITH 20 28789.5 22139.5TURNER 30 30289.5 30289.5WARD 30 31539.5 31539.5,Order By 子句,Oracle 分析函数,4)WINDOWING子句 用于定义分析函数将在其上操作的行的集合 Windowing子句给出了一个定义变化或固定的数据窗口的方法,分析函数将对这些数据进行操作 默认的窗口是一个固
12、定的窗口,仅仅在一组的第一行开始,一直继续到当前行,要使用窗口,必须使用ORDER BY子句 根据两个标准可以建立窗口:数据值的范围(RANGE)或与当前行的行偏移量(ROWS).,11,Oracle 分析函数,RANGE窗口仅对NUMBER和DATE起作用,因为不可能从VARCHAR2中增加或减去N个单元另外的限制是ORDER BY中只能有一列,因而范围实际上是一维的,不能在N维空间中 例:统计前100天平均工资 avg(t.sal)over(order by t.hiredate asc range 100 preceding),12,Oracle 分析函数,Row窗口利用ROW特性,就没
13、有RANGE那样的限制了,数据可以是任何类型,且ORDER BY 可以包括很多列 Specifying窗口UNBOUNDED PRECEDING:这个窗口从当前分区的第一行开始,并结束于正在处理的当前行CURRENT ROW:该窗口从当前行开始(或结束)Numeric Expression PRECEDING:对该窗口从当前行之前的数字表达式(Numeric Expression)的行开始。对ROWS来说,从行序值小于数字表达式的当前行的值开始.Numeric Expression FOLLOWING:该窗口在当前行Numeric Expression行之后的行终止(或开始),且从行序值大于当
14、前行Numeric Expression行的范围开始(或终止)ROWS between 100 preceding and 5 preceding:当前行前5到100行,13,Oracle 分析函数,14,Oracle 分析函数,15,Oracle 分析函数,16,Oracle 分析函数,17,select deptno,ename,sal,sum(sal)over(partition by deptno order by ename rows 2 preceding)sliding_totalfrom emporder by deptno,ename,Windowing 子句,DEPTNO
15、ENAME SAL SLIDING_TOTAL-10 KING 5000.00 5000 10 MILLER 1300.00 6300 20 ADAMS 1100.00 1100 20 CLARK 2964.50 4064.5 20 FORD 4000.00 8064.5 20 JONES 2975.00 9939.5 20 SCOTT 4000.00 10975 20 SMITH 800.00 7775 30 ALLEN 1600.00 1600 30 BLAKE 2850.00 4450 30 JAMES 950.00 5400 30 MARTIN 1250.00 5050 30 TURN
16、ER 1500.00 3700 30 WARD 1250.00 400014 rows selected,select ename,sal,hiredate,hiredate-100 windowtop,first_value(ename)over(order by hiredate asc range 100 preceding)ename_prec,first_value(hiredate)over(order by hiredate asc range 100 preceding)hiredate_prec from emp order by hiredate asc,Range 窗口,
17、ENAME SAL HIREDATE WINDOWTOP ENAME_PREC HIREDATE_PREC-SMITH 800.00 1980-12-17 1980-9-8 SMITH 1980-12-17ALLEN 1600.00 1981-2-20 1980-11-12 SMITH 1980-12-17WARD 1250.00 1981-2-22 1980-11-14 SMITH 1980-12-17JONES 2975.00 1981-4-2 1980-12-23 ALLEN 1981-2-20BLAKE 2850.00 1981-5-1 1981-1-21 ALLEN 1981-2-2
18、0CLARK 2964.50 1981-6-9 1981-3-1 JONES 1981-4-2TURNER 1500.00 1981-9-8 1981-5-31 CLARK 1981-6-9MARTIN 1250.00 1981-9-28 1981-6-20 TURNER 1981-9-8KING 5000.00 1981-11-17 1981-8-9 TURNER 1981-9-8FORD 4000.00 1981-12-3 1981-8-25 TURNER 1981-9-8JAMES 950.00 1981-12-3 1981-8-25 TURNER 1981-9-8MILLER 1300
19、.00 1982-1-23 1981-10-15 KING 1981-11-17SCOTT 4000.00 1987-4-19 1987-1-9 SCOTT 1987-4-19ADAMS 1100.00 1987-5-23 1987-2-12 SCOTT 1987-4-1914 rows selected,select ename,sal,hiredate,first_value(ename)over(order by hiredate asc rows 5 preceding)ename_prec,first_value(hiredate)over(order by hiredate asc
20、 rows 5 preceding)hiredate_precfrom emporder by hiredate asc,ROW 窗口,ENAME SAL HIREDATE ENAME_PREC HIREDATE_PREC-SMITH 800.00 1980-12-17 SMITH 1980-12-17ALLEN 1600.00 1981-2-20 SMITH 1980-12-17WARD 1250.00 1981-2-22 SMITH 1980-12-17JONES 2975.00 1981-4-2 SMITH 1980-12-17BLAKE 2850.00 1981-5-1 SMITH 1
21、980-12-17CLARK 2964.50 1981-6-9 SMITH 1980-12-17TURNER 1500.00 1981-9-8 ALLEN 1981-2-20MARTIN 1250.00 1981-9-28 WARD 1981-2-22KING 5000.00 1981-11-17 JONES 1981-4-2JAMES 950.00 1981-12-3 BLAKE 1981-5-1FORD 4000.00 1981-12-3 CLARK 1981-6-9MILLER 1300.00 1982-1-23 TURNER 1981-9-8SCOTT 4000.00 1987-4-1
22、9 MARTIN 1981-9-28ADAMS 1100.00 1987-5-23 KING 1981-11-1714 rows selected,select ename,hiredate,sal,avg(sal)over(order by hiredate ascrows 5 preceding)avg_5_before,count(*)over(order by hiredate ascrows 5 preceding)obs_before,avg(sal)over(order by hiredate desc rows 5 preceding)avg_5_after,count(*)o
23、ver(order by hiredate desc rows 5 preceding)obs_afterfrom emporder by hiredate asc,ROW 窗口,ENAME HIREDATE SAL AVG_5_BEFORE OBS_BEFORE AVG_5_AFTER OBS_AFTER-SMITH 1980-12-17 800.00 800 1 2073.25 6ALLEN 1981-2-20 1600.00 1200 2 2189.916666 6WARD 1981-2-22 1250.00 1216.6666666 3 2131.583333 6JONES 1981-
24、4-2 2975.00 1656.25 4 2756.583333 6BLAKE 1981-5-1 2850.00 1895 5 2927.416666 6CLARK 1981-6-9 2964.50 2073.25 6 2610.75 6TURNER 1981-9-8 1500.00 2189.9166666 6 2333.333333 6MARTIN 1981-9-28 1250.00 2131.5833333 6 2750 6KING 1981-11-17 5000.00 2756.5833333 6 2725 6JAMES 1981-12-3 950.00 2419.0833333 6
25、 1837.5 4FORD 1981-12-3 4000.00 2610.75 6 2270 5MILLER 1982-1-23 1300.00 2333.3333333 6 2133.333333 3SCOTT 1987-4-19 4000.00 2750 6 2550 2ADAMS 1987-5-23 1100.00 2725 6 1100 114 rows selected,select deptno,ename,hiredate,count(*)over(partition by deptno order by hiredate nulls first range 100 preced
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 初级 培训
链接地址:https://www.31ppt.com/p-6578418.html