1. 聚合函数
聚合函数 | 功能 |
---|---|
count() | 统计满足条件的记录的行数 |
max() | 找出满足条件的记录的最大值 |
min() | 找出满足条件的记录的最小值 |
sum() | 统计满足条件的记录的值的和 |
avg() | 统计满足条件的记录的值的平均数 |
注意:
-
count
函数的使用:
count(*)、count(id)、count(1)。
count(*)能统计一共有多少条记录,而count(id)是统计id列的非空值的记录数,也就是说它们的值可能不同。扩展阅读: MySQL:count(*),count(字段),count(1)的区别 -
在聚合函数的查询语句中,不能查询除了聚合函数和分组字段之外的字段,因为这样没有意义(一般数据库会报错)。
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