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