- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
sql分组函数使用
sql分组函数使用
关键字: sql分组函数使用
转自:/bookfiles/235/100座机电话号码.shtml
在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析。
8.3.1 GROUP BY子句创建分组
创建分组是通过GROUP BY子句实现的。与WHERE子句不同,GROUP BY子句用于归纳信息类型,以汇总相关数据。而为什么要使用GROUP BY子句创建分组呢?可通过下面这个简单例子来说明。
实例17 单一分组的查询
假如要从TEACHER表中查询所有男教师的平均工资,用前面介绍的聚合函数AVG ,实现代码如下:
SELECT AVG SAL AS boyavg_sal
FROM TEACHER
WHERE?? TSEX 男
运行结果如图8.18所示。
图8.18 TEACHER表中查询所有男教师的平均工资
而如果同时需要查询所有女教师的平均工资,该如何处理呢?显然,采用上述方法只能在WHERE子句中改变查询条件,重新查询。而如果要在一次查询中,同时得到二者的查询结果,就需要以性别为基准,将表中的所有数据记录分组,即男教师组和女教师组,并分别对两组数据进行分析,即计算工资(SAL列)的平均值。
实现上述功能,就需要使用分组子句GROUP BY。包括GROUP BY子句的查询就称为组合查询。语法如下。
SELECT column, SUM column
FROM table
GROUP BY column
说明:GROUP BY子句依据column列里的数据对行进行分组,即具有相同的值的行被划为一组。它一般与聚合函数同时使用。当然,这里的SUM 函数也可以是其他聚合函数。所有的组合列(GROUP BY子句中列出的列)必须是来自FROM子句列出的表,不能根据实际值、聚合函数结果或者其他表达式计算的值来对行分组。
实例18 GROUP BY子句分组查询
从TEACHER表中查询所有男教师的平均工资和所有女教师的平均工资,实现代码如下。
SELECT TSEX+教师AS TEACHER, AVG SAL AS avg_sal
FROM TEACHER
GROUP BY TSEX
运行结果如图8.19所示。
图8.19 TEACHER表中所有男教师和所有女教师的平均工资
下面分析一下DBMS执行该实例的步骤。 DBMS首先执行FROM子句,将表TEACHER作为中间表。 如果有WHERE子句,则根据其中的搜索条件,从中间表中去除那些值为False的列。这里没有WHERE子句,所以跳过该步。 根据GROUP BY子句指定的分组列即TSEX,将中间表中的数据进行分组。这里TSEX只有“男”和“女”,因此中间表中的数据被分成了两组,一组中TSEX的值为“男”,另一组中TSEX的值为“女”。 为每个行组计算SELECT子句中的值,并为每组生成查询结果中的一行。对于TSEX值为“男”的行组,SELECT子句中首先执行“TSEX+教师”,得到“男教师”列值,再执行“AVG SAL ”,求得该行组中的SAL的均值,将这两个值作为结果表中的一条记录。同样,对TSEX值为“女”的行组,进行类似的操作得到另一条记录。
8.3.2 GROUP BY子句根据多列组合行
上节介绍的GROUP BY子句进行组合查询,在GROUP BY子句中只有一列,它是组合查询的最简单形式。如果表中的行组依赖于多列,只要在查询的GROUP BY子句中,列出定义组所需的所有列即可。
实例19 GROUP BY子句根据多列组合行
从TEACHER表中查询各个系男教师和女教师的人数。实现代码:
SELECT DNAME,TSEX, COUNT * AS TOTAL_NUM
FROM TEACHER
GROUP BY DNAME,TSEX
ORDER BY DNAME
运行结果如图8.20所示。
图8.20 TEACHER表中各系男教师和女教师的人数
从结果中可以发现,只有计算机系列出了男教师和女教师的人数。而别的系,只列出了一个值,这是因为,在TEACHER表中,这些系中的教师只有一种性别,如生物系只有两个女教师,而没有男教师,系统就认为该行记录为NULL,所以生物系的男教师的人数记录就不包含在结果表中。
8.3.3 ROLLUP运算符和CUBE运算符
在使用GROUP BY子句根据多列组合行时,可以在GROUP BY子句中使用ROLLUP运算符和CUBE运算符,扩展查询结果。两者的主要不同在于,CUBE运算符扩展的信息要比ROLLUP运算符多,下面结合具体的实例讲解二者的使用及区别。
1.ROLLUP运算符的使用
实例20 使用ROLLUP运算符扩查询
使用ROLLUP运算符扩展实例19查询结果。实现代码:
S
您可能关注的文档
最近下载
- 代谢相关(非酒精性)脂肪性肝病防治指南(2024年版) .pdf VIP
- 大连理工大学22春“计算机科学与技术”《数据结构》期末考试高频考点版(带答案)试卷号4.pdf VIP
- 新生儿机械通气常规.pptx
- 全国通用版高考语文一轮复习论述类文本阅读论述类文本筛选并整合文中信息教案.pdf VIP
- 光伏电站建设与施工技术 课件 第一章 光伏电站项目建设前期准备.ppt
- 代谢相关(非酒精性)脂肪性肝病防治指南(2024年版)解读.pptx VIP
- 2024届高考语文论述类文本阅读考点训练:分析概括观点、态度.pdf VIP
- (完整版)生命与健康常识八年级下册教案.pdf VIP
- 高考语文一轮复习:信息类文本阅读之概念类(原卷版+解析).pdf VIP
- (通用版)2019年高考语文一轮复习论述类文本阅读论述类文本筛选并整合文中信息教案.doc VIP
文档评论(0)