30分钟回顾MySQL语法(下)

六.聚集函数

使用聚集函数,可以方便的分析数据,主要有以下几种应用场景:

1.确定表的行数 (统计)

2.对某一列值进行求和

3.找出表的列 最大值,最小值 或平均值

特点: 使用聚集函数,返回的结果 是单行单列

用处:一般用于子查询 或  与分组搭配使用.  更多的是搭配分组使用

以下函数 distinct 为可选值 

6.1 AVG([DISTINCT] expr)     #求某一列平均值 会自动去除 内容为null 的列

例如:select avg(age) from student # 求 学生的平均年龄 

6.2 COUNT([DISTINCT] expr)  #统计某一列出现的行数 会自动去除 内容为null 的列

例如: select * from student   # 统计共有多少条学生记录

6.3 MAX([DISTINCT] expr)  #求出某一列的最大值  

例如: select max(age) from student   # 计算学生中最大的年龄是

6.4 MIN([DISTINCT] expr)  #求出某一列的最小值

例如: select min(age) from student   # 计算学生中最小的年龄是

max 与 min 通常用来查找 数值或日期的最 大/小 值

6.5 SUM([DISTINCT] expr)  # 对某一列的所有值进行求和

例如: select sum(age) from student   # 统计学生年龄的总和

七.数据分组

一般聚集函数都是与分组搭配使用,分组是按照某一特点 把表中的数据分成多个组,分组后分别再进行聚集操作

6.1 关键字 : group by cloum

select sex,count(*) as 总人数  from  student group by sex #统计不同性别的人数

特点:先分组 再聚集

需注意:

1.虽然没有明确要求, 但是一般 用于分组的列 , 都要在 select 语句中查询出

2.关键字优先级: group by  必需在 where 语句之后 , order by 之前

3.group by 后不可跟聚集函数, 不可跟别名

4.如果分组中存在null值, 会将null单独作为一个分组. 如果有多个null ,可将多个null作为一个分组

6.2 过滤分组数据 HAVING 

where 是对行数据进行过滤, 不存在分组的概念,如果要对组内的数据再进行过滤,则需要使用另一个关键字 HAVING5

HAVING支持所有的 where子句中的操作符,语法完全一致 .

举个例子 :从学生表中分别统计男生,女生中 ,年龄在20岁以上的 人数,并且人数在5个以上

select sex,count(*)  from student where age > 20 group by sex  having count(*) > 5

having 后的表达式,必须是 select 后面出现的非别名的有效表达式, 

6.3 分组后排序 按照人数进行排序 (各个关键字的顺序不可以错)

select sex,count(*)  from student where age > 20 group by sex  having count(*) > 5

6.4 关键字的顺序

从前至后: select  , from  , where  , group by ,   having ,  order by  ,limit

猜你喜欢

转载自www.cnblogs.com/lzzRye/p/9359284.html