嗨客网搜索
数据库教程
Mysql数据汇总

Mysql数据汇总教程

在正式的生产环境中,我们需要对一些数据进行汇总,比如求一批数据的和,求一批数据里面的最大值,最小值,平均值,确定一批数据的行数等等。

这些操作不需要我们把所有的数据查询出来,然后对数据进行操作,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;

运行结果如下

32 avg_01.png

AVG() 只能用来确定特定数值列的平均值,它只能用在一个列上面,不能用在多个列上面。AVG() 函数会忽略掉列值为 null 的行。AVG() 函数可以和 where 组合使用。只对过滤出来符合条件的数据进行计算。

COUNT()函数

-- 嗨客网(www.haicoder.net) SELECT COUNT(age) FROM student;

运行结果如下

33 count_01.png

在例子中,我们一共有九条记录,但是在这边 count(age) 统计的时候,只有八条记录。因为 count 在统计的时候,它会过滤掉为 null 的列,null 的列的数据不会被统计。

-- 嗨客网(www.haicoder.net) SELECT COUNT(*) FROM student;

34 count_02.png

COUNT() 函数里面,可以传列名,也可以传 *,甚至可以传递其他的数据,比如传递 1,2 等等数字。如果使用 COUNT( * ) 的时候,它会统计选择出来的行数的总行数,不会管列中有没有空。

而具体统计列的时候,它不会统计列为 null 的数据。COUNT() 函数可以和 where 组合使用。只对过滤出来符合条件的数据进行计算。

MAX()函数

-- 嗨客网(www.haicoder.net) SELECT stu_name,stu_no,MAX(age) FROM student WHERE stu_name LIKE '%亮%';

运行结果如下

35 max_01.png

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 '%亮%';

运行结果如下

36 min_01.png

因为 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 '%亮%';

运行结果如下

37 sum_01.png

SUM 是用来求某列数值的总和,它也只能求一列。它可以和 where 组合使用,过滤出符合条件的数据进行计算。如果遇到为 null 的数据,会忽略。

总结

想要对数据汇总,就需要使用到聚集函数。SQL 支持 5 种聚合函数,可以用多种方法来统计它们,得到想要的结果。这些函数操作效率比较高。

嗨客网顶部