MySQL-分组查询
2022/5/24 2:20:12
本文主要是介绍MySQL-分组查询,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
查询每个部门的平均工资
查询每个工种的最高工资
# 查询每个工种的最高工资 SELECT MAX(salary),job_id FROM `employees` GROUP BY `job_id`
查询每个位置上的部门个数
# 查询每个位置上的部门个数 select count(*),`location_id` from `departments` group by `location_id`
添加筛选条件
查询邮箱中包含a字符的,每个部门的平均工资
# 添加筛选条件 # 查询邮箱中包含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`;
②根据①的结果进行筛选,查询哪个部门的员工个数>2
#②根据①的结果进行筛选,查询哪个部门的员工个数>2 select count(*),`department_id` from `employees` group by `department_id` having count(*)>2;
注:要用HAVING来连接 不能用where来连接 因为where筛选条件是针对employees里面的,而count(*)不在employees里面,要对筛选完之后的结果进行筛选 则需要用HAVING
查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
# 查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资 SELECT `job_id`,MAX(`salary`) FROM `employees` WHERE `commission_pct` IS NOT NULL GROUP BY `job_id` HAVING MAX(`salary`)>12000;
查询领导编号>102的每个领导手下的员工的最低工资>5000的领导编号是哪个,以及其最低工资
#查询领导编号>102的每个领导手下的员工的最低工资>5000的领导编号是哪个,以及其最低工资 SELECT `manager_id`,MIN(`salary`) FROM `employees` WHERE `manager_id`>102 GROUP BY `manager_id` HAVING MIN(`salary`)>5000;
思考过程->拆分
分组查询的特点
按表达式或函数分组
按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些
思考过程如下
select count(*),LENGTH(`last_name`) len_name from `employees` group by length(`last_name`) having COUNT(*)>5
按多个字段分组
查询每个部门每个工种的员工的平均工资
#按多个字段分组 #查询每个部门每个工种的员工的平均工资 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;
分组查询的特点
(多个字段之间用逗号隔开没有顺序要求,表达式或函数用的较少
分组查询的案例习题
查询各job_id的员工工资的最大值,最小值,平均值,总和,并按job_id升序
#查询各job_id的员工工资的最大值,最小值,平均值,总和,并按job_id升序 select max(`salary`),min(`salary`),avg(`salary`),sum(`salary`),job_id from `employees` group by `job_id` order by job_id asc;
查询员工最高工资和最低工资的差距< DIFFERENCE >
#查询员工最高工资和最低工资的差距<DIFFERENCE> select max(`salary`)-min(`salary`) DIFFERENCE from `employees`
查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
#查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内 select min(`salary`) ,`manager_id` from `employees` where `manager_id` is not null group by `manager_id` having MIN(`salary`) >=6000
查询所有部门的编号,员工数虽和工资平均值,并按平均工资降序
# 查询所有部门的编号,员工数虽和工资平均值,并按平均工资降序 select count(*),`department_id`,avg(`salary`) from `employees` group by department_id order by AVG(`salary`) desc
选择具有名个job_id的员工人数
#选择具有名个job_id的员工人数 SELECT COUNT(*),`job_id` FROM `employees` GROUP BY `job_id`
这篇关于MySQL-分组查询的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-02MySQL 3主集群搭建
- 2024-12-25如何部署MySQL集群资料:新手入门教程
- 2024-12-24MySQL集群部署资料:新手入门教程
- 2024-12-24MySQL集群资料详解:新手入门教程
- 2024-12-24MySQL集群部署入门教程
- 2024-12-24部署MySQL集群学习:新手入门教程
- 2024-12-24部署MySQL集群入门:一步一步搭建指南
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解