版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Oracle 分析函数 2008.08.30,2008-08-30,2,WITH CONNECT BY SYS_CONNECT_BY_PATH GROUPING SETS ROLLUP(CUBE) OVER ROW_NUMBER RANK DENSE_RANK PERCENT_RANK(CUME_DIST) FIRST_VALUE(LAST_VALUE) LAG(LEAD) MAX(MIN) AVG(SUM) RATIO_TO_REPORT,Oracle 分析函数,2008-08-30,3,Oracle 分析函数,在一般的应用系统开发时,使用较少,主要集中报表开发,数据仓库应用中; 对于一些语
2、句中使用分析函数,可以达到事半功倍的效果; Oracle的分析函数功能强大,可以用于SQL的优化,往往用普通的SQL需要好几次表扫描的,用了分析函数后可以一句话解决;,Oracle 分析函数,2008-08-30,4,功能描述:用于一个语句中某些中间结果放在临时表空间的SQL语句,可以理解为定义一些sql的结果集为变量,然后直接引用.(只能使用在select语句中) 语法:WITH subquery_name AS (the aggregation SQL statement) SELECT (query naming subquery_name); 例子: WITH a AS (SELECT
3、 * FROM scott.emp), b AS (SELECT * FROM scott.dept) SELECT a.deptno, b.dname, a.empno, a.ename FROM a, b WHERE a.deptno = b.deptno ORDER BY a.deptno, a.empno; 上面例子目的是取部门及其下属雇员资料,WITH,2008-08-30,5,功能描述:树状查询 语法:START WITH condition CONNECT BY condition 例子: select id, lpad(rightname, level * 5 + length
4、b(rightname), -), rightname, parentid from s_u_right start with parentid = 0 connect by prior id = parentid;,CONNECT BY,6,功能描述:实现将从父节点到当前行内容以“path”或者层次元素列表的形式显示出来 语法:SYS_CONNECT_BY_PATH (column, char) 例子: SELECT LPAD( , 2 * level - 1) | SYS_CONNECT_BY_PATH(last_name, /) Path FROM employees START WIT
5、H last_name = Kochhar CONNECT BY PRIOR employee_id = manager_id;,SYS_CONNECT_BY_PATH,2008-08-30,7,功能描述:分组自定义汇总 语法:GROUP BY GROUPING SETS (list), (list) . ) 例子: SELECT prod_id, cust_id, channel_id, SUM(quantity_sold) FROM sales WHERE cust_id 80 GROUP BY GROUPING SETS(prod_id,cust_id, channel_id),(pro
6、d_id);,GROUPING SETS,2008-08-30,8,功能描述:分组小计及汇总 语法: ROLLUP | CUBE ( grouping_expression_list ) 例子: select job, deptno, sum(sal) total_sal from emp group by rollup(job, deptno);,ROLLUP(CUBE),2008-08-30,9,功能描述:开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化 例子: over(order by salary) 按照salary排序进行累计,order by是个
7、默认的开窗函数 over(partition by deptno)按照部门分区 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 f
8、ollowing) 每行对应的数据窗口是从第一行到最后一行,等效: over(order by salary range between unbounded preceding and unbounded following),OVER,2008-08-30,10,功能描述:返回有序组中一行的偏移量,从而可用于按特定标准排序的行号 语法:ROW_NUMBER ( ) OVER ( query_partition_clause order_by_clause ) 例子:下例返回每个员工再在每个部门中按员工号排序后的顺序号 SELECT department_id, last_name, empl
9、oyee_id, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY employee_id) AS emp_id FROM employees WHERE department_id 50;,ROW_NUMBER,2008-08-30,11,功能描述:根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置 语法:RANK ( ) OVER ( query_partition_clause order_by_clause ) 例子:下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号(注意与DENSE
10、_RANK函数的区别) SELECT d.department_id, e.last_name, e.salary, RANK() OVER(PARTITION BY e.department_id ORDER BY e.salary) as drank FROM employees e, departments d WHERE e.department_id = d.department_id AND d.department_id IN (60, 90);,RANK,2008-08-30,12,功能描述:根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置
11、语法:RANK ( ) OVER ( query_partition_clause order_by_clause ) 例子:下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号(注意与DENSE_RANK函数的区别) SELECT d.department_id, e.last_name, e.salary, DENSE_RANK() OVER(PARTITION BY e.department_id ORDER BY e.salary) as drank FROM employees e, departments d WHERE e.department_id = d.departm
12、ent_id AND d.department_id IN (60, 90);,DENSE_RANK,2008-08-30,13,功能描述:和CUME_DIST(累积分配)函数类似,对于一个组中给定的行来说,在计算那行的序号时,先减1,然后除以n-1(n为组中所有的行数)。该函数总是返回01(包括1)之间的数 语法:PERCENT_RANK ( ) OVER ( query_partition_clause order_by_clause ) 例子:下例中如果Khoo的salary为2900,则pr值为0.6,因为RANK函数对于等值的返回序列值是一样的 SELECT department_i
13、d, last_name, salary, PERCENT_RANK() OVER(PARTITION BY department_id ORDER BY salary) AS pr FROM employees WHERE department_id 100 ORDER BY department_id, salary;,PERCENT_RANK,2008-08-30,14,功能描述:返回组中数据窗口的第一个值 语法:FIRST_VALUE ( expr ) OVER ( analytic_clause ) 例子:下面例子计算按部门分区按薪水排序的数据窗口的第一个值对应的名字,如果薪水的第一
14、个值有多个,则从多个对应的名字中取缺省排序的第一个名字 SELECT department_id, last_name, salary, FIRST_VALUE(last_name) OVER(PARTITION BY department_id ORDER BY salary ASC) AS lowest_sal FROM employees WHERE department_id in (20, 30);,FIRST_VALUE,2008-08-30,15,功能描述:可以访问结果集中的其它行而不用进行自连接。它允许去处理游标,就好像游标是一个数组一样。在给定组中可参考当前行之前的行,这样就
15、可以从组中与当前行一起选择以前的行。Offset是一个正整数,其默认值为1,若索引超出窗口的范围,就返回默认值(默认返回的是组中第一行),其相反的函数是LEAD 语法:LAG ( value_expr , offset , default ) OVER ( query_partition_clause order_by_clause ) 例子:下面的例子中列prev_sal返回按hire_date排序的前1行的salary值SELECT last_name, hire_date, salary, LAG(salary, 1, 0) OVER(ORDER BY hire_date) AS pre
16、v_sal FROM employees WHERE job_id = PU_CLERK;,LAG,2008-08-30,16,功能描述:在一个组中的数据窗口中查找表达式的最大值 语法:MAX ( DISTINCT | ALL expr ) OVER ( analytic_clause ) 例子:下面例子中dept_max返回当前行所在部门的最大薪水值 SELECT department_id, last_name, salary, MAX(salary) OVER(PARTITION BY department_id) AS dept_max FROM employees WHERE dep
17、artment_id in (10, 20, 30);,MAX,2008-08-30,17,功能描述:用于计算一个组和数据窗口内表达式的平均值 语法:AVG( DISTINCT | ALL expr) OVER(analytic_clause) 例子:面的例子中列c_mavg计算员工表中每个员工的平均薪水报告,该平均值由当前员工和与之具有相同经理的前一个和后一个三者的平均数得来; SELECT manager_id, last_name, hire_date, salary, AVG(salary) OVER(PARTITION BY manager_id ORDER BY hire_date rows BETWEEN 1 PRECEDING AND 3 FOLLOWING) AS c_mavg FROM employees;,AVG,2008-08-30,18,功能描述:该函数计算expression/(sum(expression)的值,它给出相对于总数的百分比,即当前行对sum(expression)的贡献 语法:RATIO_TO_REPORT ( expr ) OVER ( query_partition_clause ) 例子:下例计算每个员工的工资占该类员工总工资的百分比 SELECT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全国交通安全日中小学交通安全教育课件(图文并茂)
- 浙江省嘉兴市二十一中纪外国语学校2025-2026学年八年级(上)月考数学试卷(1月份)(含简略答案)
- 江苏省泰州市兴化市2027届九年级上学期期初数学试卷(含答案)
- 2026年高绩效沟通测试题及答案
- 中外教育史试题及答案
- 2026年art逻辑测试题及答案
- 2026年开心生活测试题及答案
- 2026年感应起电测试题及答案
- 2026年品类管理测试题及答案
- 2026年昆明积大测试题及答案
- 2026年全国高中数学联合竞赛一试(A卷)试卷及参考答案
- 山东省济南市2026-2027学年高中三年级摸底考试暨开学考化学+答案
- 2026年浙江经贸职业技术学院高职单招笔试英语试题库含答案解析3套试卷
- JL树木伐移项目监理规划
- 节能技术在化工中创新课题申报书
- 初中数学九年级上册《利用相似三角形原理测量高度》跨学科项目式教学设计
- 《中华人民共和国生态环境法典》应知应会测试题100道
- 2025年山东公务员考试申论试题及答案(B卷)
- 船台施工方案
- 2026年非小细胞肺癌诊疗指南
- 千牛平台服务条款协议合同
评论
0/150
提交评论