
SELECT CourseID,AVG(Score) AS 课程平均成绩
FROM Score
GROUP BY CourseID
以上这种类型查询 ,在SQL Sever 中叫作分组查询,分组查询采用GROUP BY 子句来实现。
-
多列分组查询
而如果要统计每个学期男、女学生人数,则理论上先把每个学期分开,再针对每个学期,把男、女学生人数各自统计,也就是需要按照两个列进行分组:所属年纪和性别。T-SQL语句如下。
SELECT COUNT(*) AS 人数,SGrade AS 年级,SSex AS 性别 FROM StudentsGROUP BY SGrade,SSexORDER BY SGrade而结果如下:

不难理解,使用GROUP BY 关键字时。在SELECT 列表中可以指定的列是有限制的,仅允许以下几项。
被分组的列为每个分组返回一个值的表达式,如聚合函数计算出的列。 -
使用HAVING子句进行分组筛选
(1)查询年级总人数超过15的年级。
首先可以通过分组查询获取每个年级的总人数,对应的T-SQL语句如下。
SELECT COUNT(*) AS 人数,SGrade AS 年级 FROM Students
GROUP BY SGrade
但是还有一个条件: 人数超过15的年级。这个时候,牵扯到分组统计后的条件限制,限制条件为COUNT(*)>15。这时候使用WHERE子句是不能满足查询要求的。因为WHERE子句只能对没有分组统计前的数据行进行筛选。对分组后的条件的筛选必须使用使用HAVING子句,简单地说,HAVING子句用来分组后的数据进行筛选,将"组"看作"列"来限定条件。
以上需求的T-SQL语句如下。
SQL分组查询与HAVING子句详解:多列分组及筛选高级应用

本文详细解析了SQL分组查询的基本概念,展示了如何进行多列分组以统计不同年级和性别的学生数量,并介绍了HAVING子句在满足特定条件筛选分组结果的重要性。通过实例说明了如何利用HAVING筛选出年级总人数超过15的年级。
653





