SQL语句--Group By总结.doc
《SQL语句--Group By总结.doc》由会员分享,可在线阅读,更多相关《SQL语句--Group By总结.doc(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、SQL语句-Group By总结SQL语句-Group By总结1SQL语句-GroupBy总结1.GroupBy语句简介:GroupBy语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。P.S.这里真是体会到了一个好的命名的力量,GroupBy从字面是直接去理解是非常好理解的。恩,以后在命名的环节一定要加把劲:)。话题扯远了。2.GroupBy的使用:上面已经给出了对GroupBy语句的理解。基于这个理解和SQLServer2022的联机帮助,下面对GroupBy语句的各
2、种典型使用进行依次列举说明。2.1GroupByExpressions:这个恐怕是GroupBy语句最常见的用法了,GroupBy+分组字段(可以有多个)。在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。比如有如下数据集,其中水果名称(FruitName)和出产国家(ProductPlace)为联合主键:FruitNameProductPlacePriceAppleChina$1.1AppleJapan$2.1AppleUSA$2.5OrangeChina$0.8BananaChina$3.1PeachUSA$3.0如果我们想知道每个国家有多少种水果,那么我们可
3、以通过如下SQL语句来完成:SELECTCOUNT(*)AS水果种类,ProductPlaceAS出产国FROMT_TEST_FRUITINFOGROUPBYProductPlace这个SQL语句就是使用了GroupBy+分组字段的方式,那么这句SQL语句就可以解释成“我按照出产国家(ProductPlace)将数据集进行分组,然后分别按照各个组来统计各自的记录数量。”很好理解对吧。这里值得注意的是结果集中有两个返回字段,一个是ProductPlace(出产国),一个是水果种类。如果我们这里水果种类不是用Count(*),而是类似如下写法的话:SELECTFruitName,ProductPl
4、aceFROMT_TEST_FRUITINFOGROUPBYProductPlace那么SQL在执行此语句的时候会报如下的类似错误:选择列表中的列T_TEST_FRUITINFO.FruitName无效,因为该列没有包含在聚合函数或GROUPBY子句中。这就是我们需要注意的一点,如果在返回集字段中,这些字段要么就要包含在GroupBy语句的后面,作为分组的依据;要么就要被包含在聚合函数中。我们可以将GroupBy操作想象成如下的一个过程,首先系统根据SELECT语句得到一个结果集,如最开始的那个水果、出产国家、单价的一个详细表。然后根据分组字段,将具有相同分组字段的记录归并成了一条记录。这个时
5、候剩下的那些不存在于GroupBy语句后面作为分组依据的字段就有可能出现多个值,但是目前一种分组情况只有一条记录,一个数据格是无法放入多个数值的,所以这里就需要通过一定的处理将这些多值的列转化成单值,然后将其放在对应的数据格中,那么完成这个步骤的就是聚合函数。这就是为什么这些函数叫聚合函数(aggregatefunctions)了。2.2GroupByAllexpressions:GroupByAll+分组字段,这个和前面提到的GroupByExpressions的形式多了一个关键字ALL。这个关键字只有在使用了where语句的,且where条件筛选掉了一些组的情况才可以看出效果。在SQLSe
6、rver2022的联机帮助中,对于GroupByAll是这样进行描述的:作者:mnmnm6692022-4-1418:46回复此发言2SQL语句:GroupBy总结如果使用ALL关键字,那么查询结果将包括由GROUPBY子句产生的所有组,即使某些组没有符合搜索条件的行。没有ALL关键字,包含GROUPBY子句的SELECT语句将不显示没有符合条件的行的组。其中有这么一句话“如果使用ALL关键字,那么查询结果将包含由GroupBy子句产生的所有组.没有ALL关键字,那么不显示不符合条件的行组。”这句话听起来好像挺耳熟的,对了,好像和LEFTJOIN和RIGHTJOIN有点像。其实这里是类比LEF
7、TJOIN来进行理解的。还是基于如下这样一个数据集:FruitNameProductPlacePriceAppleChina$1.1AppleJapan$2.1AppleUSA$2.5OrangeChina$0.8BananaChina$3.1PeachUSA$3.首先我们不使用带ALL关键字的GroupBy语句:SELECTCOUNT(*)AS水果种类,ProductPlaceAS出产国FROMT_TEST_FRUITINFOWHERE(ProductPlaceJapan)GROUPBYProductPlace那么在最后结果中由于Japan不符合where语句,所以分组结果中将不会出现Jap
8、an。现在我们加入ALL关键字:SELECTCOUNT(*)AS水果种类,ProductPlaceAS出产国FROMT_TEST_FRUITINFOWHERE(ProductPlaceJapan)GROUPBYALLProductPlace重新运行后,我们可以看到Japan的分组,但是对应的“水果种类”不会进行真正的统计,聚合函数会根据返回值的类型用默认值0或者NULL来代替聚合函数的返回值。2.3GROUPBYExpressionsWITHCUBE|ROLLUP:首先需要说明的是GroupByAll语句是不能和CUBE和ROLLUP关键字一起使用的。首先先说说CUBE关键字,以下是SQLSe
9、rver2022联机帮助中的说明:指定在结果集内不仅包含由GROUPBY提供的正常行,还包含汇总行。在结果集内返回每个可能的组和子组组合的GROUPBY汇总行。GROUPBY汇总行在结果中显示为NULL,但可用来表示所有值。使用GROUPING函数确定结果集内的空值是否是GROUPBY汇总值。结果集内的汇总行数取决于GROUPBY子句内包含的列数。GROUPBY子句中的每个操作数(列)绑定在分组NULL下,并且分组适用于所有其它操作数(列)。由于CUBE返回每个可能的组和子组组合,因此不论指定分组列时所使用的是什么顺序,行数都相同。我们通常的GroupBy语句是按照其后所跟的所有字段进行分组,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL语句-Group By总结 SQL 语句 Group By 总结
限制150内