6、MySQL 基础-分组查询

文章目录

分组查询
/*
* 语法:
* 	select 分组函数,列(要求出现在 group by 的后面)
* 	from 表
* 	where 筛选条件
* 	group by 分组的列表
* 	order by 子句
* 注意:
* 	查询列表必须特殊, 要求是分组函数和 group by 后出现的字段
* 特点:
* 	1、分组查询中的筛选条件分为两类
* 		分组前筛选
* 		分组后筛选
* 	2、分组函数做条件肯定是放在 having 子句中
* 	3、能用分组前筛选的优先使用
* 
*/

// 案例:查询每个工种的最高工资
SELECT MAX(salary),job_id FROM employees GROUP BY job_id;
// 案例:查询每个位置上的部门个数
SELECT COUNT(*),location_id FROM departments GROUP BY location_id;

// 添加筛选条件
// 案例:查询邮箱中包含a字符的,每个部门的平均工资
SELECT AVG(salary),department_id FROM employees WHERE email LIKE '%a%' GROUP BY department_id;
// 案例:查询有奖金的每个领导手下员工的最高工资
SELECT MAX(salary),manager_id FROM employees WHERE commission_pct IS NOT NULL GROUP BY manager_id;

// 添加复杂的筛选条件
// 案例:查询哪个部门的员工个数大于2
// 1、查询每个部门的员工个数
SELECT COUNT(*),department_id FROM employees GROUP BY department_id;
// 2、根据 1 的结果进行筛选,查询哪个部门的员工个数大于2
SELECT COUNT(*),department_id FROM employees GROUP BY department_id HAVING COUNT(*)>2;
// 案例:查询每个工种有奖金的员工的最高工资大于12000的工种编号和最高工资
SELECT job_id,MAX(salary) FROM employees WHERE commission_pct IS NOT NULL GROUP BY job_id HAVING MAX(salary)>12000;

// 按多个字段分组
// 案例:查询每个部门每个工种的员工的平均工资
SELECT AVG(salary), department_id, job_id FROM employees GROUP BY department_id, job_id;

// 添加排序
// 案例: 查询每个部门每个工种的员工的平均工资,并且按平均工资的高低显示
SELECT AVG(salary), department_id, job_id FROM employees GROUP BY department_id, job_id ORDER BY AVG(salary) DESC;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值