Group BY 分组
group by 语句根据一个或多个列对结果集进行分组,一般情况下,是用与数据的统计或计算,配合聚合函数使用
统计 users 表中 男女生人数
– 普通查询
select count(*) from users where sex = '女';
select count(*) from users where sex = '男';
– 分组查询
select sex,count(*) from users group by sex;
+------+----------+
| sex | count(*) |
+------+----------+
| 男 | 4 |
| 女 | 5 |
+------+----------+
统计1班和2班的人数
select classid,count(*) from users group by classid;
+---------+----------+
| classid | count(*) |
+---------+----------+
| 1 | 5 |
| 2 | 4 |
+---------+----------+
– 分别统计每个班级的男女生人数
select classid,sex,count(*) as num from users group by classid,sex;
+---------+-----+-----+
| classid | sex | num |
+---------+-----+-----+
| 1 | 男 | 2 |
| 1 | 女 | 3 |
| 2 | 男 | 2 |
| 2 | 女 | 2 |
+---------+-----+-----+
注意,在使用group by分组时,一般除了聚合函数,其它在select后面出现的字段列都需要出现在grouop by 后面
Having 子句
having时在分组聚合计算后,对结果再一次进行过滤,类似于where,
where过滤的是行数据,having过滤的是分组数据
– 要统计班级人数
select classid,count(*) from users group by classid;
– 统计班级人数,并且要人数达到5人及以上
select classid,count(*) as num from users group by classid having num >=5;