Mysql的多行函数和分组
目录
多行函数
概念
不管函数处理多少条,只返回一条记录,数据需要进行分组,如果数据可以分为多个组,那么返回的数据条数和组数相同。
常用的多行函数
- max 最大值
- min 最小值
- avg 平均值
- sum 求和
- count 求总数
数据分组
概念
按照某一个条件进行分组,每一组返回对应的结果
语法
- group by
可以对指定的列进行分组,列尽量有相同的 - having
可以对分组之后的数据进行过滤,所以能出现在having中的比较项一定是被分组的列或者是组函数
where和having的区别
- where称之为行级过滤,处理的是表中每一行数据的过滤
- having称之为组级过滤,处理的是分组之后的每一组数据
能使用where的,尽量不要使用having
语句关键字及执行顺序
语句关键字
-
select: 我们要显示那些列的数据
-
from: 从那张表中获取数据
-
where: 从表中获取数据的时候进行行级的数据过滤
-
group by: 对数据进行分组处理,一组获取对应的结果
-
having: 组级过滤,组级过滤的数据必须是分组条件或者是组函数
-
order by: 排序 asc desc
-
limit:数据数限制
执行顺序
from --> where -->group by -->select -->having-->order by-->limit
实际操作
基本语句格式和多行操作
语句格式:
- select 列名 from 表名 group by 列名;
代码展示:
sql
select * from sc;
select count(*)from sc;
select sno,max(score),min(score),avg(score),sum(score),count(*) from sc group by sno;
运行结果:
筛选语句格式
- select 列名 from 表名 group by 列名 having 条件 /(order by 列名 asc|desc /limit n)
- select 列名 from 表名 where 条件 group by 列名 /(order by 列名 asc|desc /limit n)
代码展示:
sql
select sno,score from sc;
select sno,avg(score) from sc group by sno;
select sno,avg(score) from sc group by sno having avg(score) > 80;
select sno,avg(score) from sc where score >80 group by sno order by avg(score) asc;
select sno,avg(score) from sc where score >80 group by sno limit 3;
select sno,avg(score) from sc group by sno having avg(score) > 70 order by avg(score) desc;
运行结果: