SQL中Group By的使用

293 阅读2分钟

1.概述

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

\

2.有趣的用法

我们这里有一张表A。

\

\

3.简单的例子

示例1

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

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

\

\

4.Group By 和 Order By

示例2

Select 类别, Sum(数量) AS 数量之和
From A
Group 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 A
Group By 类别

\

示例4:求各组记录数目

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

\

6.Having与Where的区别

\

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


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

示例6

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


\

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

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



\