mysql篇第十课:查询语句(四)

  这节课继续学查询

 

分组查询

语法: select 查询的字段,分组函数 from 表 group by 分组的字段

 

注意:

1、可以按单个字段分组

2、和分组函数一同查询的字段最好是分组后的字段

3、分组筛选

                  针对的表  位置                  关键字

分组前筛选:  原始表              group by的前面               where

分组后筛选:  分组后的结果集       group by的后面               having

 

4、可以按多个字段分组,字段之间用逗号隔开

5、可以支持排序

6having后可以支持别名

 

 

Demo 01:

-- 根据部门分组

select * from tbl_employee GROUP BY d_id;

 

非常奇怪,为什么每组只有一条数据?

因为group by的机制就是每组只取一条数据

 

如果我希望所有数据都显示怎么办?

 

Demo 02:

-- 根据部门分组

select * from tbl_employee GROUP BY d_id,id;

 

为什么加上id之后就全部出来了呢?

 

因为根据id分组的话,id作为主键是不可重复的,所以所有数据都会显示

 

因此,如果分组后想取得所有数据而不是每组取一条数据的话,分组条件要加上主键或者其他不可重复的列

 

下面说说where和having的区别

 

Where是在分组前 对所有数据进行条件筛选

Having 是在分组后 对所有数据以组为单位进行筛选

 

Demo 03:

-- 根据部门分组,获取组内人数大于3的组内所有成员

select * from tbl_employee GROUP BY d_id, id having count(*) > 3;

 

为什么会这样呢?

 

因为我们是根据d_id和id分组,既然你根据id分组了那么每个组其实只有一行数据

 

那么怎么才能实现呢? 要用子查询,这个以后讲。

 

Demo 04:

-- 查看每个部门的人数

select d_id as 部门, count(*) as 部门人数 from tbl_employee GROUP BY d_id;

 

Demo 05:

-- 查看部门人数大于3的每个部门的人数

select d_id as 部门, count(*) as 部门人数 from tbl_employee GROUP BY d_id having count(*) > 3;

 

猜你喜欢

转载自blog.csdn.net/qq_40061421/article/details/84400881
今日推荐