MySQL(3):内置函数使用----聚合函数
MySQL(3):内置函数使用----聚合函数
内置函数包含:
聚合函数
判断函数
日期函数
字符串函数
其他函数
一、聚合函数
常用的有5个:count、sum、avg、max、min
1、count
Count(列名)统计行的总数
Select count(*)|count(列名) from tablename;
[WHERE where_definition]
举例1:

举例2:

2、分组-group by (非常重要)
“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理,通常是聚合操作
将班级分组,并统计每种组的记录
select clazz,count(clazz) from student group by clazz;
分析:
将班级分组就要选择班级----select clazz
按照字段将班级划分为组----group by clazz
然后在组内聚合操作-------count(clazz)
举例1:将班级分组,统计每种组的记录

举例2:

举例3:

3、sum求和
Select sum(列名){,sum(列名)…} from tablename
[WHERE where_definition];
注意:
注意:sum仅对数值起作用,否则会报错
举例:每个学生6门科目








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

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



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



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

二者的比较
先过滤,再分组
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代表筛选,可以对查询结果进行查询
方法一:

方法二:


浙公网安备 33010602011771号