文章目录
- 1.`count()`函数
- 2.`sum()`函数和`avg()`函数
- 3.max()函数和min()函数
- 4.利用`group by`子句与`with rollup`一起进行统计
MySQL
的常用聚合函数包括count()
、sum()
、avg()
、max()
和min()
等。
其中,
count()
用来统计记录的条数;sum()
用来计算字段的值的总和;avg()
用来计算字段的值的平均值;max()
用来查询字段的最大值;min()
用来查询字段的最小值。
利用聚合函数可以满足表中记录的聚合运算。例如,需要计算学生成绩表中的平均成绩,可以使用avg()
函数。group by
关键字通常需要与聚合函数一起使用。
1.count()
函数
count()
函数,对于除“”以外的任何参数,返回所选择聚合中非null值的行的数目;对于参数“”,返回选择聚合所有行的数目,包含null
值的行。没有where
子句的count(*)
是经过内部优化的,能够快速的返回表中所有的记录总数。
通过查询求18级学生的总数。
分析:求学生数即为求符合要求的记录行数,一般利用count()函数实现。
mysql> select count(studentno) as '18级学生数'
-> from student
-> where substring(studentno,1,2) ='18';
2.sum()
函数和avg()
函数
sum()
函数可以求出表中某个字段取值的总和。avg()
函数可以求出表中某个字段取值的平均值。
查询score表中学生的期末总成绩大于270分的学生学号、总成绩及平均成绩。
分析:先按照studentno对final值进行分组,再利用sum()函数和avg()函数分别期末总成绩和平均值,然后进行期末总成绩大于270分学生的筛选。
mysql> select studentno 学号, sum(final) 总分, avg(final) 平均分
-> from score
-> group by studentno
-> having sum(final)>270
-> order by studentno;
3.max()函数和min()函数
max()函数可以求出表中某个字段取值的最大值。min()函数可以求出表中某个字段取值的最小值。
查询选修课程号为c05109号课程的期末最高分、最低分及之间相差的分数。
分析:分别利用max()和min()函数可以求得final的最大最小值
mysql> select max(final) 最高分, min(final) 最低分,
-> max(final)-min(final) as 分差
-> from score
-> where (courseno = 'c05109');
4.利用group by
子句与with rollup
一起进行统计
MySQL
中的with rollup
应用,可以在分组的统计数据的基础上再进行相同的总体统计。例如,对于成绩表中,查询某一门课的平均值和所有成绩的平均值,普通的group by
语句是不能实现的。
查询score表中每一门课的期末平均值和所有成绩的平均值
分析:如果使用有with rollup 子句的 group by语句,则可以实现这个要求。
mysql> select courseno 课程号,avg(final) 课程期末平均分
-> from score
-> group by courseno with rollup;