Bootstrap

mysql 最高分_MySQL系列(2)——聚合函数查询

49d0b5d69db85bdd2c3d7eacf973590e.png

写在前面:

小伙伴儿们,大家好!上一篇我们讲了MySQL的单表查询——MySql系列(1)——单表查询

这期让我们继续学习MySQL系列的聚合函数查询!

思维导图:

3a9f89933678d3843ca2bec0b7c31e89.png

一、聚合函数查询

1.COUNT()函数——用来统计记录的条数;

例如查询grade表中有几条数据:

先看grade表中所有的数据:select * from grade;

6c5b52df6a7fd31cef81ce51e2076131.png

select count(*) as total from grade;

e2b8226b7576ee925a0437e2f8abd19b.png

总共9条数据,as total是给count(*)取别名;

2.SUM()函数——是求和函数,计算一列值的总和(此列必须是数值型数据);

例如查询grade表中张三的总分:

select stuName,sum(score) from grade where stuName='张三';

caa3119d13044799490931aa90585acb.png

3.AVG()函数——求一列值的平均值的函数;

例如,查询表中张三的平均分:

select stuName,avg(score) from grade where stuName='张三';

51b240ec35fb6e382212698b1cbaa3a9.png

4.MAX()函数——求一列值的最大值的函数

例如,查询表中张三score的最大值

select stuName,max(score) from grade where stuName='张三';

6c340ed6a51fbf17015868797d8d5385.png

5.MIN()函数——求一列值的最小值的函数

例如,查询表中张三score的最小值

select stuName,min(score) from grade where stuName='张三';

5569a5e83870cbdba057a8433cb7e947.png

二、GROUP BY分组查询

group by 常常与聚合函数一起使用

1.与COUNT(*)函数一起使用

例如:查询grade表中的记录条数,并按照姓名分组:

select stuName,count(score) from grade group by stuName;

3ebcdced75d565e2ef3e387c78e7a46b.png

2.与SUM()函数一起使用

例如:查询表中每个学生的总分:

select stuName,sum(score) from grade group by stuName;

8444e89850a6b3a811863de4f88d84c9.png

3.与AVG()函数一起使用

例如:查询表中每个学生的平均分:

select stuName,avg(score) from grade group by stuName;

f28502e5a26a17bd015f7d1ea6f2c510.png

4.与MAX()函数一起使用

例如:查询表中每个学生的最高分:

select stuName,max(score) from grade group by stuName;

510fe8df74fe36174ea40529950e5511.png

注意:当没有用分组时,前面可以加上其他属性;

比如:查询表中张三的最高分,并查询出是哪门课程的最高分:

select stuName,course,max(score) from grade where stuName='张三';

b29e7bd23ddb558096cb2a702f3df059.png

这里可以显示出哪门课程的最高分!

再比如:查询表中所有学生的最高分,并查询是哪门课程的最高分,且以名字分组:

select stuName,course,max(score) from grade group by stuName;

13d8407de5ecfe57a50b567594a3d454.png

显然这是错误的!!!前面我们可以看到李四的最高分是数学95分,王五是英语89分!

因此,在用group by分组时前面是不能加上其他属性的!

三、group by的其他用法:

1.与HAVING一起使用(对查询结果的一种筛选):

例如:之前查询grade表中各位同学的平均分:

select stuName,avg(score) from grade group by stuName;

0b4206f0f22ea54299322d4d72f110ec.png

现在只需要查询avg(score)>84分的结果出来(可以在末尾加上having avg(score)>84);

select stuName,avg(score) from grade group by stuName having avg(score)>84;

f4a8c8fbcd08601d91d268480c7310c7.png

可以看到having有筛选结果的作用!

2.与GROUP_CONCAT一起使用(对查询结果进行汇总,全部展示出来)

例如先查看表t_student:select * from t_student;

19c29cd3bec70e498d46f458ac59b6e0.png

查询每个年级有多少个学生:

select gradeName,count(stuName) from t_student group by gradeName;

c2f61081df09a887399b42ec592164e4.png

现在要求查询出每个年级的所有学生姓名(将count换成group_concat即可):

select gradeName,group_concat(stuName) from t_student group by gradeName;

8e43ae11bca5b1ae4c12d3b3efdca4cb.png

3.与WITH ROLLUP一起使用(最后加入一个总和行)

例如:查询每个年级有多少个学生:

select gradeName,count(stuName) from t_student group by gradeName;

c2f61081df09a887399b42ec592164e4.png

现在要求求出所有年级的总学生数目:

select gradeName,count(stuName) from t_student group by gradeName with rollup;

916210ae8865e59ea4bf1630db2d3b3d.png

若是数据类型不是Int型的话,假如是文本型,那么将会将文本都列举出来!

要求列举出所有年级的学生:

select gradeName,group_concat(stuName) from t_student group by gradeName with rollup;

84e2396fe0d5b8b04f8221851702702d.png


好了,今天就先分享到这里了,下期继续给大家带来Spring系列后续讲解!欢迎关注我的原创技术公众号~

49d0b5d69db85bdd2c3d7eacf973590e.png

原创实属不易,求个关注吧~

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;