SQL语句如下:
Select StudentID as 学员编号,CourseID as 内部测试, Avg(Score) as 内部测试平均成绩
From Score
Group By StudentID,CourseID
查询输出的结果如下图:
要使用Group By关键字时,在select列表中可以指定的项目是有限的,select语句中仅允许以下几项。
被分组的列
为每个组返回一个值的表达式
2.使用Having子句进行分组筛选
案例需求:接上面的案例,如果查询内部测试的成绩,只显示“补考过的学员”的成绩怎么处理 ?
这个时候,牵涉到分组统计后的条件限制。限制条件为Count(score)>1必须要使用Having子句
满足以上要求的SQL语句如下:
Select StudentID as 学员编号,CourseID as 内部测试,
Avg(Score) as 内部测试平均成绩
From Score
Group By StudentID,CourseID
Having Count(Score)>1
查询结果如图:
3.分组查询—对比
WHERE子句从数据源中去掉不符合其搜索条件的数据
GROUP BY子句搜集数据行到各个组中,统计函数为各个组计算统计值
HAVING子句去掉不符合其组搜索条件的各组数据行
下面继续通过案例的形式讲解分组查询的具体应用过程。
案例需求1: 在按照部门分类的员工表中,要查询“有多个员工的工资不低于2000 的部门编号”
Select 部门编号, Count(*)
From 员工信息表
Where 工资 >= 2000
GROUP BY 部门编号
Having Count(*) > 1
案例需求2: 查询08年2月到7月的客户账单合计费用
Select CAST (DATEPART(YEAR,paytime) as varchar(10))+'年'+ CAST (DATEPART(MONTH,paytime) as varchar(10))+'月' AS 日期,Sum(CHARGE) 合计费用
From "history-accountbill“ Where isPaid<>0 AND
paytime between '2008-02-01 00:00:00' and '2008-7-31 23:59:59'
Group By CAST (DATEPART(YEAR,paytime) as varchar(10))+'年'+ CAST (DATEPART(MONTH,paytime) as Varchar(10))+'月'