分组
- 按照字段分组,表示此字段相同的数据会被放到一个组中
- 分组后,分组的依据列会显示在结果集中,其他列不会显示在结果集中
- 可以对分组后的数据进行统计,做聚合运算
- 语法:
select 列1,列2,聚合... from 表名 group by 列1,列2...
例1:查询各种性别的人数
select sex,count(*) from students group by sex
例2:查询各种年龄的人数
select age,count(*) from students group by age
例3:求每个班男生女生各有多少人
select class,sex,count(*) from students group by class,sex
- 分组若不放聚合函数,相当于distinct的用法
例4:查询学生都来自哪些地方
select hometown from students group by hometown
分组后的数据筛选
- 语法:
select 列1,列2,聚合... from 表名
group by 列1,列2,列3...
having 列1,...聚合...
- having后面的条件运算符与where的相同
例1:查询男生总人数
方案一
select count(*) from students where sex='男'
-----------------------------------
方案二:
select sex,count(*) from students group by sex having sex='男'
- having后面还可以跟聚合函数
例2:查询至少有两名男同学的班号
select class,sex,count(*) from students group by class,sex having count(*)>=2 and sex='男'
对比where与having
- where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
- having是对group by的结果进行筛选,有且只能接在group by后面