聚集函数通常和GROUP BY联合起来使用
()必选,[]可选
COUNT(*) 统计元组个数,返回被选行数
COUNT([DISTINCT|ALL]<列名>) 统计一列中值的个数
SUM([DISTINCT|ALL]<列名>) 统计一列值的总和 此列必须为数值型
AVG([DISTINCT|ALL]<列名>)计算一列值的平均值 此列必须为数值型
MAX([DISTINCT|ALL]<列名>)计算某一列值的最大值
MIN([DISTINCT|ALL]<列名>)计算某一列值的最小值
GROUP BY 子句分组 有点像透视表,可以拉分组
细化聚集函数的作用对象
如果未对查询结构分组,聚集函数将作用于整个查询结果
对查询结果分组后,聚集函数将分别作用每一个组
按指定的一列或多咧分组,值相等的为一组
选修不同课程的人数的学号
SELECT Cno, COUNT(Sno) 选择课程编号,及选修课程的人数的计数
FROM SC
GROUP BY Cno 以课程编号分组
获得选修课程数大于3的学生的学号
SELECT Sno 学生学号
FROM SC
GROUP BY Sno 以学生学号分组
HAVING COUNT(*)>3 行数大于3
错误案例:
SELECT Sno ,AVG(Grade)
FROM SC
WHERE AVG(Grade)>=90 WHERE是对记录的限定,但是AVG是对组的限定是在GROUP BY基础上的WHERE是作用于记录,HAVING 作用于记录之上的分组
GROUP BY Sno
正确案例:
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=90
练习列出计算机系姓刘同学的信息,按照学号大小排序
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)