MySQL(3):内置函数使用----聚合函数

MySQL(3):内置函数使用----聚合函数

内置函数包含:
        聚合函数
        判断函数
        日期函数
        字符串函数
        其他函数

一、聚合函数

常用的有5个:count、sum、avg、max、min

1、count
Count(列名)统计行的总数
Select count(*)|count(列名) from tablename;
		[WHERE where_definition]

举例1:

image

举例2:

image

2、分组-group by (非常重要)

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理,通常是聚合操作

将班级分组,并统计每种组的记录
select clazz,count(clazz) from student group by clazz;

分析:
将班级分组就要选择班级----select clazz
按照字段将班级划分为组----group by clazz
然后在组内聚合操作-------count(clazz)

举例1:将班级分组,统计每种组的记录

image

举例2:

image

举例3:

image

3、sum求和
Select sum(列名){,sum(列名)…} from tablename
		[WHERE where_definition];
		
注意:
	注意:sum仅对数值起作用,否则会报错

举例:每个学生6门科目

image

image

image

image

image

image

image

image

4、avg求平均分
AVG函数返回满足where条件的一列的平均值
Select sum(列名){,sum(列名)…} from tablename
		[WHERE where_definition]

image

5、Max/min求最值
Max/min函数返回满足where条件的一列的最大/最小值
Select max(列名) from tablename
		[WHERE where_definition] 

image

image

image

假如我们不想看理科一般的人数

image

image

image

假如我们不想看理科一般的人数,利用嵌套查询

image

二者的比较

先过滤,再分组
select clazz,count(*) from student where clazz != '理科一般' group by clazz;

先分组计算,再过滤
select * from (select clazz,count(*) from student group by clazz;) as t1 where
t1.clazz != '理科一班';

mysql中的执行顺序:
from--->where--->group by--->count--->select--->order by(升降序)--->limit

先分组再计算需要消耗很大的资源,不推荐使用
推荐使用先过滤,再分组计算

SQL执行顺序--执行计划

其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序 
与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行:
from--where--group by--having--select--order by--limit

from:需要从哪个数据表检索数据 

where:过滤表中数据的条件 

group by:如何将上面过滤出的数据分组 

having:对上面已经分组的数据进行过滤的条件  

select:查看结果集中的哪个列,或列的计算结果 

order by :按照什么样的顺序来查看返回的数据 

执行计划:expain select * ……
having的使用

有这样的需求:统计每个班级人数,并把人数超过50的班级取出来,这个时候就需要用到having字句了

​ 方法一:使用嵌套查询

​ 方法二:使用havin

如果使用计算过后再过滤的话,不能使用where,需要使用having来替代where

where没有办法对结果进行再次查询;
having代表筛选,可以对查询结果进行查询

方法一:

image

方法二:

image

posted @ 2022-01-13 00:05  阿伟宝座  阅读(244)  评论(0)    收藏  举报