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` ;
相关推荐
March.s2 小时前
MySQL 数据库原理与实战:从数据管理到 LAMP 建站全解
数据库·mysql
字节跳动的猫3 小时前
LikeShop 种草社区模块二开:笔记发布、话题广场与商品挂载实现
数据结构·数据库
IvorySQL3 小时前
PostgreSQL 日报| PostgreSQL JDBC 安全更新(10 月 10 日)
数据库·postgresql·区块链
悟道子HD3 小时前
网络安全基本功——MySQL基础
android·mysql·web安全
晚风叙码3 小时前
MySQL 增删改查(CRUD)完全指南:从入门到面试
数据库·mysql·面试
dishugj3 小时前
HANA集群计划内切换与维护操作
java·linux·数据库
IvorySQL13 小时前
PostgreSQL 日报|修复截断 zstd 备份检测(10 月 9 日)
数据库·postgresql
刘胡子大叔13 小时前
SQL 脚本的导入顺序
数据库·sql
代码什么用13 小时前
Spring对IoC的实现
数据库·spring
hz5678915 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件