数据库原理-数据查询 单表查询【二】
数据库原理-数据查询 单表查询【二】聚集函数聚集函数:统计元组个数COUNT(*)统计一列中值的个数COUNT([DISTINCT|ALL]<列名>)计算一列值的总和(此列必须为数值型)SUM([DISTINCT|[ALL]<列名>)计算一列值的平均值(此列必须为数值型)AVG([DISTINCT|ALL]<列名>)求一列中的最大值和最小值MAX([DISTIN
·
数据库原理-数据查询 单表查询【二】
聚集函数
聚集函数:
-
统计元组个数
COUNT(*)
-
统计一列中值的个数
COUNT([DISTINCT|ALL]<列名>)
-
计算一列值的总和(此列必须为数值型)
SUM([DISTINCT|[ALL]<列名>)
-
计算一列值的平均值(此列必须为数值型)
AVG([DISTINCT|ALL]<列名>)
-
求一列中的最大值和最小值
MAX([DISTINCT|ALL]<列名>)
MIN([DISTINCT|ALL]<列名>)
查询学生总人数
SELECT COUNT(*)
FROM Student;
查询选修了课程的学生人数
SELECT COUNT(DISTINCT Sno)
FROM SC;
计算1号课程的学生平均成绩
SELECT AVG(Grade)
FROM SC
WHERE Cno='1'
查询选修1号课程的学生最高分数
SELECT MAX(Grade)
FROM SC
WHERE Cno='1';
查询学生201215012选修课程的总学分数
SELECT SUM(Credit)
FROM SC,Course
WHERE Sno='201215012' AND SC.Cno=Course.Cno
GROUP BY 子句分组
细化聚集函数的作用对象
- 如果未对查询结果分组,聚集函数将作用于整个查询结果
- 对查询结果分组后,聚集函数将分别作用于每个组
- 按指定的一列或多列值分组,值相等的为一组
求各个课程号及相应的选课人数
SELECT Sno,COUNT(Sno)
FROM SC
GROUP BY Cno;
查询选修了3门以上课程的学生学号
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>3
查询平均成绩大于等于90分的学生学号和平均成绩
错误的SQL
SELECT Sno,AVG(Grade)
FROM SC
WHERE AVG(Grade)>=90
GROUP BY Sno;
因为WHERE子句中不能所有聚集函数作为条件表达式
正确的SQL
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=90
HAVING短语与WHERE子句的区别
- 作用对象不同
- WHERE子句作用与基本表或视图,从中选择满足条件的元组
- HAVING短语作用于组,从中选择满足条件的组
列出计算机系姓刘的同学的信息,按照学号大小排序
SELECT *
FROM Student
WHERE Sdept='CS' AND Sname LIKE '刘%'
ORDER BY Sno;
按系并区分男女统计各系学生的人数、并按照人数降序排序
SELECT Sdept,Ssex,COUNT(Sno)
FROM Student
GROUP BY Sdept,Ssex
ORDER BY COUNT(Sno) DESC;
更多推荐
已为社区贡献2条内容
所有评论(0)