4.2.5 GROUP BY子句的使用

4.2.5 GROUP BY子句的使用

GROUP BY子句指定用来放置输出行的组。如果SELECT子句<select list>中包含聚合函数,则GROUP BY将计算每组的汇总值。指定GROUP BY时,选择列表中任意非聚合表达式内的所有列都应包含在GROUP BY列表中,或者GROUP BY表达式必须与选择列表表达式完全匹配。

1.简单分组

按课程编号分组,可查看有哪些课程组别。SQL语句如下:

执行以上SQL语句,查询结果如图4.29所示。

图4.29 按课程编号分组

2.聚合函数

聚合函数对一组值执行计算,并返回单个值。除了COUNT以外,聚合函数都会忽略空值。聚合函数经常与SELECT语句的GROUP BY子句一起使用。

聚合函数只能在以下位置作为表达式使用:

➢SELECT 语句的选择列表(子查询或外部查询);

➢COMPUTE 或 COMPUTE BY 子句;

➢HAVING 子句。

Transact-SQL 提供的常见聚合函数,见表4.4。

表4.4 常用的聚合函数

➢COUNT()

查询学生总人数,SQL语句如下:

执行以上SQL语句,查询结果如图4.30所示。

图4.30 查询学生总人数

查询参加过考试的学生总人数,SQL语句如下:

执行以上SQL语句,查询结果如图4.31所示。

图4.31 查询参加过考试的学生总人数

查询C语言成绩超过90分的学生人数,SQL语句如下:

执行以上SQL语句,查询结果如图4.32所示。

图4.32 查询C语言成绩超过90分的学生人数

➢SUM()、AVG()

查询C语言所有成绩的总分,SQL语句如下:

执行以上SQL语句,查询结果如图4.33所示。

图4.33 查询C语言所有成绩的总分

查询C语言所有成绩的平均分,SQL语句如下:

执行以上SQL语句,查询结果如图4.34所示。

图4.34 查询C语言所有成绩的平均分

➢MAX()、MIN()

查询C语言所有成绩中的最高分,SQL语句如下:

执行以上SQL语句,查询结果如图4.35所示。

图4.35 查询C语言所有成绩中的最高分

查询C语言所有成绩中的最低分,SQL语句如下:

执行以上SQL语句,查询结果如图4.36所示。

图4.36 查询C语言所有成绩中的最低分

3.GROUP和聚合函数结合使用

按课程编号分组,同时统计该组别信息。SQL语句如下:

执行以上SQL语句,查询结果如图4.37所示。

图4.37 按课程编号分组并统计该组别信息

查询每门课程中,成绩在90分以上的学员人数。SQL语句如下:

执行以上SQL语句,查询结果如图4.38所示。

图4.38 查询每门课程中成绩在90分以上的学员人数

若需列出所有组别,则使用ALL,对比上面的结果。SQL语句如下:

执行以上SQL语句,查询结果如图4.39所示。

图4.39 列出所有组别