Mysql 之 分组查询

分组查询


语法:

	select 分组函数,列(要求出现再group by后面)
	from 表
	【where 筛选条件】
	group by 分组列表
	【order by 子句】
注意:
		查询列表必须特殊要求,是分组函数和 group by后出现的字段

特点:

1.分组查询中的条件分为两类
		    	数据源						位置						关键字
分组前筛选		原始表						GROUP BY 前面	    	where
分组后筛选		分组后的结果集		        GROUP BY 后面	    	having

①分组函数做条件,肯定是放在having当中
②能用分组前筛选的 优先考虑分组前筛选

2.GROUP BY 子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开),表达式 或函数(用的较少)
3.也可以添加排序(放在整个分组查询最后)

注意

GROUP BY
HAVING 
这两个 关键字后面都是支持别名的,但where关键字 后面不支持别名

案例

案例1:简单分组查询

查询每个工种job_id,最高工资salary 。
SQL语句自然是按照工种 job_id 分组

select MAX(salary) ,job_id
from employees
GROUP BY job_id;

结果:在这里插入图片描述

案例2:添加分组前的筛选

查询领导编号(manager_id) >102 的每个领导手下的最低工资(salary)>5000 的领导编号是哪个,以及其最低工资salary

 ① 查询领导手下的最低工资
select min(salary),manager_id
from employees
GROUP BY manager_id

#②添加筛选条件:编号>102
select min(salary),manager_id
from employees
where manager_id >102
GROUP BY manager_id

#③添加筛选条件 :最低工资>5000
select min(salary) '最低工资',manager_id
from employees
where manager_id >102
GROUP BY manager_id
HAVING min(salary) >5000

结果:
在这里插入图片描述

案例3:添加分组后的筛选

查询哪个部门的员工个数 >2

# ① 查询每个部门的员工个数
SELECT COUNT(*) '员工个数',department_id
from employees
GROUP BY department_id;

# ② 根据第一个结果筛选
SELECT COUNT(*) '员工个数',department_id
from employees
GROUP BY department_id
HAVING COUNT(*) >2

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值