收藏 分享(赏)

【oracle-官方技术支持】les17-对-group-by-子句的扩展.ppt

上传人:无敌 文档编号:90158 上传时间:2018-03-12 格式:PPT 页数:27 大小:461KB
下载 相关 举报
【oracle-官方技术支持】les17-对-group-by-子句的扩展.ppt_第1页
第1页 / 共27页
【oracle-官方技术支持】les17-对-group-by-子句的扩展.ppt_第2页
第2页 / 共27页
【oracle-官方技术支持】les17-对-group-by-子句的扩展.ppt_第3页
第3页 / 共27页
【oracle-官方技术支持】les17-对-group-by-子句的扩展.ppt_第4页
第4页 / 共27页
【oracle-官方技术支持】les17-对-group-by-子句的扩展.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、,对 GROUP BY 子句的扩展,目标,通过本章学习,您将可以:使用 ROLLUP 操作分组使用 CUBE 操作分组使用 GROUPING 函数处理 ROLLUP 或 CUBE操作所产生的空值使用 GROUPING SETS 操作进行单独分组,组函数,组函数处理多行返回一个行,SELECTcolumn, group_function(column). . .FROMtableWHEREconditionGROUP BYgroup_by_expressionORDER BYcolumn;,SELECT AVG(salary), STDDEV(salary), COUNT(commission_

2、pct),MAX(hire_date)FROM employeesWHERE job_id LIKE SA%;,例子:,GROUP BY 子句,SELECT department_id, job_id, SUM(salary), COUNT(employee_id)FROM employeesGROUP BY department_id, job_id ;,SELECTcolumn,FROMtableWHEREconditionGROUP BYgroup_by_expressionORDER BYcolumn;,例子:,语法:,group_function(column). . .,HAVIN

3、G 子句,使用 HAVING 对组函数进行限制对查询进行第二次限制,SELECTcolumn, group_function(column). FROMtableWHEREconditionGROUP BYgroup_by_expressionHAVING having_expression ORDER BYcolumn;,带有ROLLUP 和CUBE 操作的GROUP BY 子句,使用带有ROLLUP 和 CUBE 操作的GROUP BY 子句产生多种分组结果ROLLUP 产生n + 1种分组结果CUBE 产生2的n次方种分组结果,ROLLUP 操作符,ROLLUP 是对 GROUP BY

4、子句的扩展ROLLUP 产生n + 1种分组结果,顺序是从右向左,SELECTcolumn, group_function(column). . .FROMtableWHEREconditionGROUP BYROLLUP group_by_expressionHAVING having_expression;ORDER BYcolumn;,ROLLUP 应用举例,1,2,3,CUBE 操作符,CUBE是对 GROUP BY 子句的扩展CUBE 会产生类似于笛卡尔集的分组结果,SELECTcolumn, group_function(column).FROMtableWHEREconditio

5、nGROUP BYCUBE group_by_expressionHAVING having_expressionORDER BYcolumn;,CUBE 应用举例,SELECT department_id, job_id, SUM(salary)FROM employees WHERE department_id 60GROUP BY CUBE (department_id, job_id) ;,1,2,3,4,GROUPING 函数,GROUPING 函数可以和 CUBE 或 ROLLUP 结合使用使用 GROUPING 函数,可以找到哪些列在该行中参加了分组使用 GROUPING 函数,

6、 可以区分空值产生的原因GROUPING 函数返回 0 或 1,SELECT column, group_function(column) . , GROUPING(expr)FROM tableWHERE conditionGROUP BY ROLLUPCUBE group_by_expressionHAVING having_expressionORDER BY column;,GROUPING 函数举例,SELECT department_id DEPTID, job_id JOB, SUM(salary), GROUPING(department_id) GRP_DEPT, GROUP

7、ING(job_id) GRP_JOBFROM employeesWHERE department_id 50GROUP BY ROLLUP(department_id, job_id);,2,1,3,GROUPING SETS,GROUPING SETS 是对GROUP BY 子句的进一步扩充使用 GROUPING SETS 在同一个查询中定义多个分组集Oracle 对 GROUPING SETS 子句指定的分组集进行分组后用 UNION ALL 操作将各分组结果结合起来 Grouping set 的优点:只进行一次分组即可不必书写复杂的 UNION 语句GROUPING SETS 中包含的

8、分组项越多,性能越好。,GROUPING SETS应用举例,SELECT department_id, job_id, manager_id,avg(salary)FROM employeesGROUP BY GROUPING SETS (department_id,job_id), (job_id,manager_id);,1,2,复合列,复合列是被作为整体处理的一组列的集合ROLLUP (a, , d)使用括号将若干列组成复合列在ROLLUP 或 CUBE 中作为整体进行操作在ROLLUP 或 CUBE中, 复合列可以避免产生不必要的分组结果,(b,c),复合列应用举例,SELECT de

9、partment_id, job_id, manager_id, SUM(salary)FROM employees GROUP BY ROLLUP( department_id,(job_id, manager_id);,2,1,3,连接分组集,连接分组集可以产生有用的对分组项的结合将各分组集, ROLLUP 和 CUBE 用逗号连接 Oracle 自动在 GROUP BY 子句中将各分组集进行连接 连接的结果是对各分组生成笛卡尔集,GROUP BY GROUPING SETS(a, b), GROUPING SETS(c, d),连接分组集应用举例,SELECT department_id

10、, job_id, manager_id, SUM(salary)FROM employeesGROUP BY department_id, ROLLUP(job_id), CUBE(manager_id);,1,2,3,4,总结,通过本章学习,您已经可以: 使用 ROLLUP 操作符使用 CUBE 操作符使用 GROUPING 函数处理在 ROLLUP 或 CUBE中产生的空值使用 GROUPING SETS 创建分组集在 GROUP BY 子句中组合分组:复合列连接分组集,Hidden Slide,Hidden Slide,Hidden Slide,Hidden Slide,Hidden Slide,Hidden Slide,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报