数据库原理-数据查询 单表查询【二】
聚集函数
聚集函数:
- 统计元组个数COUNT(*)
- 统计一列中值的个数COUNT([DISTINCT|ALL]<列名>)
- 计算一列值的总和(此列必须为数值型)SUM([DISTINCT|[ALL]<列名>)
- 计算一列值的平均值(此列必须为数值型)AVG([DISTINCT|ALL]<列名>)
- 求一列中的最大值和最小值MAX([DISTINCT|ALL]<列名>)MIN([DISTINCT|ALL]<列名>)
查询学生总人数
SELECTCOUNT(*)FROM Student;
查询选修了课程的学生人数
SELECTCOUNT(DISTINCT Sno)FROM SC;
计算1号课程的学生平均成绩
SELECTAVG(Grade)FROM SC
WHERE Cno='1'
查询选修1号课程的学生最高分数
SELECTMAX(Grade)FROM SC
WHERE Cno='1';
查询学生201215012选修课程的总学分数
SELECTSUM(Credit)FROM SC,Course
WHERE Sno='201215012'AND SC.Cno=Course.Cno
GROUP BY 子句分组
细化聚集函数的作用对象
- 如果未对查询结果分组,聚集函数将作用于整个查询结果
- 对查询结果分组后,聚集函数将分别作用于每个组
- 按指定的一列或多列值分组,值相等的为一组
求各个课程号及相应的选课人数
SELECT Sno,COUNT(Sno)FROM SC
GROUPBY Cno;

查询选修了3门以上课程的学生学号
SELECT Sno
FROM SC
GROUPBY Sno
HAVINGCOUNT(*)>3
查询平均成绩大于等于90分的学生学号和平均成绩
错误的SQL
SELECT Sno,AVG(Grade)FROM SC
WHEREAVG(Grade)>=90GROUPBY Sno;
因为WHERE子句中不能所有聚集函数作为条件表达式
正确的SQL
SELECT Sno,AVG(Grade)FROM SC
GROUPBY Sno
HAVINGAVG(Grade)>=90
HAVING短语与WHERE子句的区别
- 作用对象不同
- WHERE子句作用与基本表或视图,从中选择满足条件的元组
- HAVING短语作用于组,从中选择满足条件的组
列出计算机系姓刘的同学的信息,按照学号大小排序
SELECT*FROM Student
WHERE Sdept='CS'AND Sname LIKE'刘%'ORDERBY Sno;
按系并区分男女统计各系学生的人数、并按照人数降序排序
SELECT Sdept,Ssex,COUNT(Sno)FROM Student
GROUPBY Sdept,Ssex
ORDERBYCOUNT(Sno)DESC;
版权归原作者 小旺不正经 所有, 如有侵权,请联系我们删除。