MySQL高级查询( 二 )

 

MySQL高级查询

文章插图
 
求平均值:
 
求男生的平均身高,聚合函数不统计null值 select avg(height) from students where sex='男'; 求男生的平均身高,包含身高为null的值 select avg(ifnull(height,0)) from students where sex='男';
 
说明:
 
  • ifnull函数:表示判断指定字段的值是否为null,如果为空则使用自己提供的值
 
MySQL高级查询

文章插图
 
聚合函数特点:
 
  • 聚合函数默认忽略字段为null的记录,要想列值为null的记录也参与计算,必须使用ifnull函数对null值做替换
四、分组查询 
分组查询就是将查询结果按照指定字段进行分组,字段中数据相等的分为一组
分组查询基本的语法格式:
group by 列名 [having 条件表达式] [with rollup]
说明:
 
  • 列名:是指按照指定字段的值进行分组
  • having 条件表达式:用来过滤分组后的数据
  • with rollup:在所有记录的最后加上一条记录,显示select查询时聚合函数的统计和计算结果
 
group by 的使用:
group by可用于单个字段分组,也可用于多个字段分组
 
根据sex字段来分组 select gender from students group by sex; 根据name和sex字段来分组 select name,sex from students group by name,sex;
 
MySQL高级查询

文章插图
 
group by + group_concat()的使用:
group_concat(字段名):统计每个分组指定字段的信息集合,每个信息之间用逗号分割
 
根据sex字段进行分组,查询sex字段和分组的name字段信息 select sex,group_concat(name) from students group by sex;
 
MySQL高级查询

文章插图
 
group by + 聚合函数的使用:
 
统计不同性别的人的平均年龄 select sex,avg(age) from students group by sex; 统计不同性别的人的个数 select sex,count(*) from students group by sex;
 
MySQL高级查询

文章插图
 
group by + having的使用:
having作用和where类似都是过滤数据的,但having是过滤分组数据的,只能用于group by
 
根据sex字段进行分组,统计分组条数大于2的 select sex,count(*) from students group by sex having count(*)>2;
 
MySQL高级查询

文章插图
 
group by + with rollup的使用:
with rollup的作用是:在最后记录后面新增一行,显示select查询时聚合函数的统计和计算结果
 
根据sex字段进行分组,汇总总人数 select sex,count(*) from students group by sex with rollup; 根据sex字段进行分组,汇总所有人年龄 select sex,group_concat(age) from students group by sex with rollup;
 
MySQL高级查询

文章插图
 
MySQL高级查询

文章插图
 
小结: