SQL中Group By的使用

来源:互联网 发布:淘宝神笔怎么用 编辑:程序博客网 时间:2024/06/06 00:17

1.概述

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。(我们可以简单的理解为分类汇总)


2.有趣的用法

我们这里有一张表A。



3.简单的例子

示例1

Select 类别, Sum(数量) As 数量之和From AGroup By 类别

返回结果如下表,实际上就是分类汇总。



4.Group By 和 Order By

示例2

Select 类别, Sum(数量) AS 数量之和From AGroup By 类别Order By Sum(数量) desc
返回结果如下表



注:SQL中默认为升序(ASC),想要降序需要添加desc


5.Group By中Select指定的字段限制

group by语句中select指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数中,常见的聚合函数如下表:



注:count(*)将返回表格中所有存在的行的总数包括值为null的行,然而count(列名)将返回表格中除去null以外的所有行的总数(有默认值的列也会被计入).  


distinct 列名,得到的结果将是除去值为null和重复数据后的结果


示例3:求各组平均值

Select 类别, Avg(数量)  AS  平均值From AGroup By 类别

示例4:求各组记录数目

Select 类别, Count(*) AS 记录数From A Group By 类别


6.Having与Where的区别


where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。


having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。

示例6

Select 类别, Sum(数量) As 数量之和 From AGroup By 类别Having Sum(数量) > 18


示例7:Having和Where的联合使用方法

Select 类别, SUM(数量)From AWhere 数量 gt;8Group By 类别Having SUM(数量) gt; 10