10-统计函数和分组记录查询
8.4 统计函数和分组记录查询
本节视频教学录像:4分钟在实际项目中,用户需要通过表中的基本数据进行统计,比如求某列值的和、某列值的平均值等。MySQL提供统计函数进行统计。
1.COUNG() 函数
COUNG()函数有两种形式。一种为COUNG(),参数为“”,统计的是符合条件的行数;另外一种为COUNGt(列名),参数为某列名,统计的是列中非空值的个数。这两种形式的参数前都可以加DISTINCT关键字消除重复。
【范例8-21】
查询计算机系的学生人数。
MySQL> select count(*) count_stu -> from student -> where sdept='计算机';
结果如下。
+-----------+ | count_stu | +-----------+ | 2| +-----------+ 1 row in set (0.04 sec)
【范例8-22】
查询选修了课程的学生人数。
MySQL> select count(distinct sno) -> from sc;
因为一个学生可能选修多门课,所以要使用DISTINCT关键字消除重复的学生编号,然后再进行统计,结果如下。
+---------------------+ | count(distinct sno) | +---------------------+ | 2| +---------------------+ 1 row in set (0.00 sec)
2.AVG([DISTINCT] <列名>) 统计某列的平均值
【范例8-23】
查询计算机系的学生平均年龄。
MySQL> select avg(sage) -> from student -> where sdept='计算机';
结果如下。
+-----------+ | avg(sage) | +-----------+ | 20.0000| +-----------+ 1 row in set (0.04 sec)
3.SUM([DISTINCT] <列名>) 统计某列值的总和
【范例8-24】
查询不同年龄的总和。
MySQL> select sum(distinct sage) -> from student;
结果如下。
+--------------------+ | sum(distinct sage) | +--------------------+ | 60| +--------------------+ 1 row in set (0.03 sec)
4.MAX([DISTINCT] <列名>)查询某列的最大值
【范例8-25】
查询选修1号课程的最高分。
MySQL> select max(grade) -> from sc -> where cno=1;
结果如下。
+------------+ | max(grade) | +------------+ | 89| +------------+ 1 row in set (0.05 sec)
5.MIN([DISTINCT] <列名>)查询某列的最小值
【范例8-26】
查询选修1号课程的最低分。
MySQL> select min(grade) -> from sc -> where cno=1;
结果如下。
+------------+ | min(grade) | +------------+ | 78| +------------+ 1 row in set (0.00 sec)
MIN()函数和MAX()函数的参数不仅可以为数值类型,也可以为字符类型。
提示 WHERE子句中不能使用统计函数作为表达式。