MySQL——分组查询

2023.9.4

MySQL 分组查询的学习笔记如下:

sql 复制代码
#分组查询
/*
分组查询中的筛选条件分为两类:
	      数据源		   位置		   关键字
分组前筛选    原始表           group by前面        where
分组后筛选    分组后的结果集   group by后面        having
*/
#查询每个工种的最高工资
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
SELECT COUNT(*),`department_id` FROM `employees` GROUP BY `department_id` HAVING COUNT(*)>2;
#查询每个工种有奖金的员工的最高工资
SELECT MAX(salary),`job_id` FROM `employees` WHERE `commission_pct` IS NOT NULL GROUP BY `job_id`;
#根据上述结果继续筛选,最高工资>12000的结果。
SELECT MAX(salary),`job_id` FROM `employees` WHERE `commission_pct` IS NOT NULL GROUP BY `job_id` HAVING MAX(salary)>12000;
#查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个,以及其最低工资。
SELECT `manager_id`,MIN(salary) FROM `employees` WHERE `manager_id`>102 GROUP BY `manager_id` HAVING MIN(salary)>5000;
#按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些。
SELECT LENGTH(`last_name`),COUNT(*) FROM `employees` GROUP BY LENGTH(`last_name`) HAVING COUNT(*)>5;
#查询每个部门每个工种的员工的平均工资,并按平均工资的高低显示。
SELECT `department_id`,`job_id`,AVG(salary) FROM `employees` GROUP BY `department_id`,`job_id` ORDER BY AVG(salary) DESC;

课后习题:

sql 复制代码
#1、查询各job_id的员工工资的最大值,最小值,平均值,总和。并按job_id升序
SELECT `job_id`,MAX(salary),MIN(salary),AVG(salary),SUM(salary) FROM `employees` GROUP BY `job_id` ORDER BY `job_id` ASC;
#2、查询员工最高工资和最低工资的差距
SELECT MAX(salary)-MIN(salary)  FROM `employees`;
#3、查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内。
SELECT `manager_id`,MIN(salary) FROM `employees` WHERE `manager_id` IS NOT NULL GROUP BY `manager_id`  HAVING MIN(salary)>=6000;
#4、查询所有部门的编号,员工数量和工资平均值,并按平均工资降序。
SELECT `department_id`,COUNT(*),AVG(salary) FROM `employees` GROUP BY `department_id` ORDER BY AVG(salary) DESC;
#5、选择具有各个job_id的员工人数
SELECT COUNT(*),`job_id` FROM `employees` GROUP BY `job_id` ;
相关推荐
2401_8315017342 分钟前
Linux之Zabbix分布式监控篇(二)
数据库·分布式·zabbix
秋林辉2 小时前
Jfinal+SQLite处理 sqlite数据库执行FIND_IN_SET报错
jvm·数据库·sqlite
巴里巴气5 小时前
MongoDB复杂查询 聚合框架
数据库·mongodb
scheduleTTe8 小时前
SQL增查
数据库·sql
浮生带你学Java8 小时前
2025Java面试题及答案整理( 2025年 7 月最新版,持续更新)
java·开发语言·数据库·面试·职场和发展
期待のcode8 小时前
图片上传实现
java·前端·javascript·数据库·servlet·交互
小毛驴8509 小时前
redis 如何持久化
数据库·redis·缓存
吗喽1543451889 小时前
用python实现自动化布尔盲注
数据库·python·自动化
hbrown9 小时前
Flask+LayUI开发手记(十一):选项集合的数据库扩展类
前端·数据库·python·layui