SQL Server数据分组
一、SQL Server Group By语句。
-
Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。
-
以下是 GROUP BY 子句的语法:
SELECT select_list FROM table_name GROUP BY column_name1, column_name2 ,...;
-
在此查询语法中, GROUP BY 子句根据其后面的列的每个值结合将一个“数据集”分组。
二、 GROUP BY子句和聚合函数。
-
和聚合函数使用。
- 从字面上来理解,GROUP 表示分组、BY 后接字段名,表示根据某个字段进行分组。
- GROUP BY 语句通常配合聚合函数(如 COUNT()、MAX() 等)一起用于统计数据,根据一个或多个列对结果集进行分组,可以在分组之后可以对组内结果进行计数。
- 聚合函数对组执行计算并返回每个组的唯一值。 -
常用的聚合函数。
- COUNT() 函数返回每个组中的行数。
- SUM() 函数返回每个组中列的数值总和。
- AVG() 函数返回每个组的平均值。
- MIN() 函数返回每个组中的最小值。
- MAX() 函数返回每个组中的最大值。 -
它们的用法大致一样,例如:
SELECT select_list1, COUNT(select_list2), /*可用于数字和字符列求每组的数量,一般是非NULL值的数量;*/ /*而COUNT(*)可以返回表中的行数(包括有NULL值的列)。*/ SUM(select_list3),/*可用于数字列求数值的总和,忽略NULL值。*/ AVG(select_list4),/*仅用于数字列求数值的平均值。自动忽略NULL值。*/ MIN(select_list5),/*可用于数字、字符和日期时间列的最小值,忽略NULL值。*/ MAX(select_list6)/*可用于数字、字符和日期时间列的最大值,忽略NULL值。*/ FROM table_name GROUP BY column_name1, column_name2,...;
三、SQL Server Having子句。
-
HAVING 子句通常与[GROUP BY]子句一起使用,以根据指定的条件列表过滤分组。
-
以下是 HAVING 子句的语法:
SELECT select_list FROM table_name GROUP BY group_list HAVING conditions;
-
在此语法中, GROUP BY 子句将行汇总为分组, HAVING 子句将一个或多个条件应用于这些每个分组。只有使条件评估为 TRUE 的组才会包含在结果中。 换句话说,过滤掉条件评估为 FALSE 或 UNKNOWN 的组。
-
因为SQL Server在 GROUP BY 子句之后处理 HAVING 子句,所以不能通过使用列别名来引用选择列表中指定的聚合函数。