教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

Oracle公司内部数据库培训资料17_对_GROUP_BY_子句的扩展

来源:网络收集 时间:2025-12-25
导读: 对 GROUP BY 子句的扩展 Copyright Oracle Corporation, 2001. All rights reserved. 目标 通过本章学习,您将可以: 使用 ROLLUP 操作分组 使用 CUBE 操作分组 使用 GROUPING 函数处理 ROLLUP 或 CUBE操作所产 生的空值 使用 GROUPING SETS 操作进行单独分组

对 GROUP BY 子句的扩展

Copyright © Oracle Corporation, 2001. All rights reserved.

目标

通过本章学习,您将可以:

使用 ROLLUP 操作分组 使用 CUBE 操作分组 使用 GROUPING 函数处理 ROLLUP 或 CUBE操作所产 生的空值 使用 GROUPING SETS 操作进行单独分组

17-2

Copyright © Oracle Corporation, 2001. All rights reserved.

组函数组函数处理多行返回一个行SELECT FROM [WHERE [GROUP BY [ORDER BY [column,] group_function(column). . . table condition] group_by_expression] column];

例子:SELECT AVG(salary), STDDEV(salary), COUNT(commission_pct),MAX(hire_date) FROM employees WHERE job_id LIKE 'SA%';

17-3

Copyright © Oracle Corporation, 2001. All rights reserved.

GROUP BY 子句语法:SELECT FROM [WHERE [GROUP BY [ORDER BY [column,] group_function(column). . . table condition] group_by_expression] column];

例子:SELECT department_id, job_id, SUM(salary), COUNT(employee_id) FROM employees GROUP BY department_id, job_id ;

17-4

Copyright © Oracle Corporation, 2001. All rights reserved.

HAVING 子句SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY [column,] group_function(column)... table condition] group_by_expression] having_expression] column];

使用 HAVING 对组函数进行限制 对查询进行第二次限制

17-5

Copyright © Oracle Corporation, 2001. All rights reserved.

带有ROLLUP 和 CUBE 操作的GROUP BY 子句 使用带有ROLLUP 和 CUBE 操作的GROUP BY 子句产生 多种分组结果 ROLLUP 产生n + 1种分组结果

CUBE 产生2的n次方种分组结果

17-6

Copyright © Oracle Corporation, 2001. All rights reserved.

ROLLUP 操作符SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY [column,] group_function(column). . . table condition] [ROLLUP] group_by_expression] having_expression]; column];

ROLLUP 是对 GROUP BY 子句的扩展ROLLUP 产生n + 1种分组结果,顺序是从右向左

17-7

Copyright © Oracle Corporation, 2001. All rights reserved.

ROLLUP 应用举例SELECT FROM WHERE GROUP BY department_id, job_id, SUM(salary) employees department_id < 60 ROLLUP(department_id, job_id);

1

2

3

17-8

Copyright © Oracle Corporation, 2001. All rights reserved.

CUBE 操作符

SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY

[column,] group_function(column)... table condition] [CUBE] group_by_expression] having_expression] column];

CUBE是对 GROUP BY 子句的扩展 CUBE 会产生类似于笛卡尔集的分组结果

17-9

Copyright © Oracle Corporation, 2001. All rights reserved.

CUBE 应用举例SELECT FROM WHERE GROUP BY department_id, job_id, SUM(salary) employees department_id < 60 CUBE (department_id, job_id) ;

1 2

3

4

17-10

Copyright © Oracle Corporation, 2001. All rights reserved.

GROUPING 函数SELECT [column,] group_function(column) . , GROUPING(expr) FROM table [WHERE condition] [GROUP BY [ROLLUP][CUBE] group_by_expression] [HAVING having_expression] [ORDER BY

column];

GROUPING 函数可以和 CUBE 或 ROLLUP 结合使用 使用 GROUPING 函数,可以找到哪些列在该行中参加 了分组 使用 GROUPING 函数, 可以区分空值产生的原因 GROUPING 函数返回 0 或 1

17-11

Copyright © Oracle Corporation, 2001. All rights reserved.

GROUPING 函数举例SELECT department_id DEPTID, job_id JOB, SUM(salary), GROUPING(department_id) GRP_DEPT, GROUPING(job_id) GRP_JOB FROM employees WHERE department_id < 50 GROUP BY ROLLUP(department_id, job_id);

1

23

17-12

Copyright © Oracle Corporation, 2001. All rights reserved.

GROUPING SETS GROUPING SETS 是对GROUP BY 子句的进一步扩充 使用 GROUPING SETS 在同一个查询中定义多个分组集 Oracle 对 GROUPING SETS 子句指定的分组集进行分组后 用 UNION ALL 操作将各分组结果结合起来

Grouping set 的优点:– 只进行一次分组即可 – 不必书写复杂的 UNION 语句 – GROUPING SETS 中包含的分组项越多,性能越好。

17-13

Copyright © Oracle Corporation, 2001. All rights reserved.

GROUPING SETS应用举例SELECT department_id, job_id, manager_id,avg(salary) FROM employees GROUP BY GROUPING SETS ((department_id,job_id), (job_id,manager_id));

1

…2

17-14

Copyright © Oracle Corporation, 2001. All rights reserved.

复合列

复合列是被作为整体处理的一组列的集合ROLLUP (a,(b,c), d)

使用括号将若干列组成复合列在ROLLUP 或 CUBE 中作 为整体进行操作 在ROLLUP 或 CUBE中, 复合列可以避免产生不必要的分 组结果

17-15

Copyright © Oracle Corporation, 2001. All rights reserved.

复合列应用举例

SELECT

department_id, job_id, manager_id, SUM(salary) FROM employees GROUP BY ROLLUP( department_id,(job_id, manager_id));

1

2

…3

17-16

Copyright © Oracle Corporation, 2001. All rights reserved.

…… 此处隐藏:1949字,全部文档内容请下载后查看。喜欢就下载吧 ……
Oracle公司内部数据库培训资料17_对_GROUP_BY_子句的扩展.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/2326724.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)