赞
赏
在正式的生产环境中,我们需要对一些数据进行汇总,比如求一批数据的和,求一批数据里面的最大值,最小值,平均值,确定一批数据的行数等等。
这些操作不需要我们把所有的数据查询出来,然后对数据进行操作,Mysql 里面提供了聚集函数,它可以对多行记录进行统计,返回一个值。
本章节我们使用下面的表里面的语句进行操作
CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `stu_no` int(11) DEFAULT NULL, `stu_name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `chinese_score` double(10,0) DEFAULT NULL COMMENT '语文成绩', `mathematics_score` double(10,0) DEFAULT NULL COMMENT '数学成绩', `english_score` double(10,0) DEFAULT NULL COMMENT '英语成绩', `birth` date DEFAULT NULL COMMENT '生日', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4; INSERT INTO student (`id`,`stu_no`,`stu_name`,`age`,`chinese_score`,`mathematics_score`,`english_score`, `birth`) VALUES (1,1001,'xiaoming',17,100,100,100,'2003-02-08'), (2,1002,'honghong',16,99,100,90,'2004-02-27'), (3,1003,'xiaojun ',18,60,55,65,'2002-11-11'), (4,1004,' 小亮 ',19,88,90,100,'2001-08-20'), (5,1005,'LIANGLIANG',19,55,100,100,'2001-02-16'), (6,1006,' 小 杰 ',16,99,55,45,'2004-08-25'), (7,1007,'小亮',20,99,99,99,'2000-12-12'), (8,1008,'无年龄',null,0,0,0,null), (9,1009,'欧阳亮亮',19,100,100,100,'2001-01-01');
聚集函数详解
常用的聚集函数有
函数名 描述 AVG() 求一批数据里面的某列数据的平均值 COUNT() 求一批数据的行数 MAX() 一批数据里面的某列里面的最大值 MIN() 一批数据里面的某列里面的最小值 SUM() 一批数据里面的某列里面数据之和 案例
AVG()函数
-- 嗨客网(www.haicoder.net) SELECT AVG(age) AS avgAge FROM student;
运行结果如下
AVG() 只能用来确定特定数值列的平均值,它只能用在一个列上面,不能用在多个列上面。AVG() 函数会忽略掉列值为 null 的行。AVG() 函数可以和 where 组合使用。只对过滤出来符合条件的数据进行计算。
COUNT()函数
-- 嗨客网(www.haicoder.net) SELECT COUNT(age) FROM student;
运行结果如下
在例子中,我们一共有九条记录,但是在这边 count(age) 统计的时候,只有八条记录。因为 count 在统计的时候,它会过滤掉为 null 的列,null 的列的数据不会被统计。
-- 嗨客网(www.haicoder.net) SELECT COUNT(*) FROM student;
COUNT() 函数里面,可以传列名,也可以传 *,甚至可以传递其他的数据,比如传递 1,2 等等数字。如果使用 COUNT( * ) 的时候,它会统计选择出来的行数的总行数,不会管列中有没有空。
而具体统计列的时候,它不会统计列为 null 的数据。COUNT() 函数可以和 where 组合使用。只对过滤出来符合条件的数据进行计算。
MAX()函数
-- 嗨客网(www.haicoder.net) SELECT stu_name,stu_no,MAX(age) FROM student WHERE stu_name LIKE '%亮%';
运行结果如下
MAX() 返回的是指定列中的最大值。MAX 里面要传入指定的列名,它会忽略列值为 null 的行的记录。MAX() 函数可以和 where 组合使用。只对过滤出来符合条件的数据进行计算。
MIN()函数
min() 函数与 MAX() 函数用法一样,功能与 MAX() 函数功能相反,它取固定列的最小值。
-- 嗨客网(www.haicoder.net) SELECT stu_name,stu_no,MIN(age) FROM student WHERE stu_name LIKE '%亮%';
运行结果如下
因为 max 和 min 是求一批数据里面的最大最小值,所以,我们可以将对应的行数据获取出来。与其他聚合函数不同的是,max 和 min 函数可以将对应的一行数据都可取出来。
MIN() 函数可以和 where 组合使用。只对过滤出来符合条件的数据进行计算。
SUM()函数
-- 嗨客网(www.haicoder.net) SELECT SUM(english_score) AS SUM_ENGLISH,SUM(mathematics_score) AS SUM_MATHE,SUM(chinese_score) AS SUM_CHINESE FROM student WHERE stu_name LIKE '%亮%';
运行结果如下
SUM 是用来求某列数值的总和,它也只能求一列。它可以和 where 组合使用,过滤出符合条件的数据进行计算。如果遇到为 null 的数据,会忽略。
总结
想要对数据汇总,就需要使用到聚集函数。SQL 支持 5 种聚合函数,可以用多种方法来统计它们,得到想要的结果。这些函数操作效率比较高。