3.4.5 分组统计查询
SELECT语句不仅可以通过WHERE子句查找满足条件的数据,还可以通过聚合函数对满足条件的数据进行求最大值、最小值、平均值、求和、计数等统计运算。常用的聚合函数见表3-27。
表3-27 聚合函数
这些聚合函数一般从一组值中计算出一个汇总信息,可使用GROUP BY 子句把字段按照值分为多组,对每个组进行统计。
例36:选出平均成绩超过80分的学生的学号和平均成绩:
select 学号,AVG(成绩) AS 平均成绩 FROM SCORE_INFO GROUP BY 学号 having avg(成绩)>=80
查询结果如表3-28所示。
表 3-28
例37:列出各门课的平均成绩、最高成绩、最低成绩和选课人数。
SELECT 课程代码,AVG(成绩) AS 平均成绩,MAX(成绩) AS 最高成绩,MIN(成绩) AS最低成绩,COUNT(学号) AS 人数 FROM Score_info GROUP BY 课程代码
查询结果如表3-29所示。
表 3-29
例38:统计VB程序设计课程成绩在85分以上的人数:
SELECT COUNT(成绩) AS "VB程序设计85分以上的人数" FROM Score_info
Where 成绩>=85 AND 课程代码=(SELECT 课程代码
FROM Course_info where 课程名称="VB程序设计")
查询结果如表3-30所示。
表 3-30
例39:列出至少修了2门课的学生姓名。
SELECT 姓名 FROM Student_info
WHERE 学号 IN(SELECT 学号 FROM Score_info
GROUP BY 学号 HAVING COUNT(*)>=2)
该语句的执行过程如下:先在考试成绩表(Score_info)按学号对学生进行分组,然后通过HAVING子句测试每个分组中包含的记录个数是否大于等于2。如果满足条件,则该组的学号即为所求,再根据学生基本信息表(Student_info)查找到对应姓名。
查询结果如表3-31所示。
表 3-31
注意:HAVING子句和WHERE子句的区别:WHERE子句是用来测试指定表中记录所应满足的条件,只有满足条件的记录才参加运算;HAVING子句是用来指定每一分组所应满足的条件,只有满足HAVING条件的那些组才能包含在查询结果中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。