MySQL详解 --- 聚合与分组

1. 聚合函数

聚合函数 功能 count() 统计满足条件的记录的行数 max() 找出满足条件的记录的最大值 min() 找出满足条件的记录的最小值 sum() 统计满足条件的记录的值的和 avg() 统计满足条件的记录的值的平均数

注意:

    count函数的使用: count(*)、count(id)、count(1)。 count(*)能统计一共有多少条记录,而count(id)是统计id列的非空值的记录数,也就是说它们的值可能不同。 在聚合函数的查询语句中,不能查询除了聚合函数和分组字段之外的字段,因为这样没有意义(一般数据库会报错)。 select max(age) from stu √ select max(age),name from stu × 聚合函数一般配合group by一起使用 聚合函数在配合group by时,可以额外查询分组字段。 select max(age), gender from stu group by gender √

2. 分组查询

 分组查询就是将原有的数据进行分组统计。

select 分组列名1, 分组列表2, 聚合函数1, 聚合函数2 from 表名
group by 分组列名1, 分组列名2;

从格式我们可以看出,分组是可以根据多个字段进行分组的。

• 分组后的条件筛选

select 分组列名, 聚合函数 from 表名
[where 条件1]
group by 分组列名
[having 条件2(可以根据聚合函数的值进行判断)];

我们既可以用where进行条件筛选,也可以用having进行条件筛选。但是这两者放置的位置以及代码执行的逻辑是不同的!

注意:

    select中出现的字段,必须在分组当中。 having子句中出现的条件判断的字段,也必须在分组当中。

例子:

-- 1
select gender, max(age) from student
where gender=男
group by gender;

-- 2
select gender, max(age) from student
group by gender
having gender=男;

对于示例1,where是对from和select的结构进行筛选的,在经过这一层筛选后,再执行group by进行分组。

对于实例2,having是对group by进行筛选的,在group by执行完毕后,再进行筛选。

SQL查询中各个关键字的执行先后顺序: from > on > join > where > group by > with > having > select > distinct > order by > limit
经验分享 程序员 微信小程序 职场和发展