进阶五:

分组查询

重点!!! 为什么重点,因为我自己 不好理解

概念:将id行的值相同的归为一类,进行平均 这个相同的也可以在实际应用到相同部门的归为一类进行平均或者求和等。
分组数据.jpg

分组数据:GROUP BY group by 字句语法
作用:可以使用 group by 子句将表中的数据分为若干组。

语法 select 分组函数,列 (要求出现在 group by的后面) from 表 [where 筛选] group by 分组的列表 [order by 子句]

案例1:查询每个工种的最高工资
select max(工资),工种 from 表名 group by 工种 (要进行分组的表(当然是工种了))
案例2:查询男女生的平均年龄
男女.jpg

案例3 也可以查询每个部门上人的个数 也就是说一个部门上有多少人。
select count(*),bumen from 表名 group by 部门。
解析:这行语句是指 把count来进行计数 bumen指的是部门列 group by 也是部门进行分组依据。

添加筛选条件的group by使用

案例:查询名字包含a的每个部门的平均工资

select avg(工资),部门 from 表名 where 姓名 like '%a%' group by 部门;

首次引入 having
还是那句话 having放在 最后 当where使用
用我的理解就是拿前面的运行完了后再进行having运算
案例:查询员工大于2 的部门
select count(),部门 from 表名 group by 部门 having count()>2;
giao问:这里为什么回筛选是 count()>2呢? 是这样的一开始查询count()后会出现一个新的列,列的名字就叫count(*),如果你用别名的话就是别名叫什么他就那列>2
这是栗子↓:
select count(*) as ren,sex from stufuqiang group by sex having ren>2;

AS 命名最好不要用中文。

where having 的两个筛选
where 分组前筛选 是筛选原始表
having 分组后筛选 分组后后的结果再进行筛选。
分组函数做条件的肯定是放再having子句中。

group by 与 排序 一块使用

案例: 查询每个部门每个工种的员工的平均工资,并且按照平均工资的高低显示。
select avg(工资),部门,工种 from 表名 group by 部门 ,工种 order by avg(工资) desc;

特点:group by 子句支持单个字段进行分组,也可以进行多个字段进行分组。多个字段的话用 逗号 隔开 没有循序。也支持表达式或者函数进行排序。