ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL-分组查询

2022-05-23 13:33:10  阅读:222  来源: 互联网

标签:salary employees 查询 job 分组 MySQL 员工 id


查询每个部门的平均工资

image

image

image

查询每个工种的最高工资

# 查询每个工种的最高工资
SELECT MAX(salary),job_id
FROM `employees`
GROUP BY `job_id`

image

查询每个位置上的部门个数

# 查询每个位置上的部门个数
select count(*),`location_id`
from `departments`
group by `location_id`

image

添加筛选条件

查询邮箱中包含a字符的,每个部门的平均工资

# 添加筛选条件
# 查询邮箱中包含a字符的,每个部门的平均工资
select Avg(`salary`),`department_id`
from `employees`
where `email` like '%a%'
group by `department_id`;

image

查询有奖金的每个领导手下员工的最高工资

select max(`salary`),`manager_id`
from `employees`
where `commission_pct` is not NULL
group by `manager_id`;

image

添加复杂的筛选条件

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

①查询每个部门的员工个数

#①查询每个部门的员工个数
select count(*),`department_id`
from `employees`
group by `department_id`;

image

②根据①的结果进行筛选,查询哪个部门的员工个数>2

#②根据①的结果进行筛选,查询哪个部门的员工个数>2
select count(*),`department_id`
from `employees`
group by `department_id`
having count(*)>2;

image

注:要用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;

image

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

#查询领导编号>102的每个领导手下的员工的最低工资>5000的领导编号是哪个,以及其最低工资
SELECT `manager_id`,MIN(`salary`)
FROM `employees`
WHERE `manager_id`>102  
GROUP BY `manager_id`
HAVING MIN(`salary`)>5000;

image

思考过程->拆分

image
image

分组查询的特点

image

按表达式或函数分组

按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些

思考过程如下

image

select count(*),LENGTH(`last_name`) len_name
from `employees`
group by length(`last_name`)
having COUNT(*)>5

image

按多个字段分组

查询每个部门每个工种的员工的平均工资

#按多个字段分组
#查询每个部门每个工种的员工的平均工资

select avg(`salary`),department_id,job_id
from `employees`
group by `department_id`,`job_id`;

image

查询每个部门每个工种的员工的平均工资,并且按平均工资的高低显示

#查询每个部门每个工种的员工的平均工资,并且按平均工资的高低显示

SELECT AVG(`salary`),department_id,job_id
FROM `employees`
GROUP BY `department_id`,`job_id`
ORDER BY AVG(`salary`) DESC;

image

分组查询的特点

image

(多个字段之间用逗号隔开没有顺序要求,表达式或函数用的较少

分组查询的案例习题

查询各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;

image

查询员工最高工资和最低工资的差距< DIFFERENCE >

#查询员工最高工资和最低工资的差距<DIFFERENCE>
select max(`salary`)-min(`salary`) DIFFERENCE
from `employees`

image

查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内

#查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
select min(`salary`) ,`manager_id`
from `employees`
where `manager_id` is not null
group by `manager_id`
having MIN(`salary`) >=6000 

image

查询所有部门的编号,员工数虽和工资平均值,并按平均工资降序

# 查询所有部门的编号,员工数虽和工资平均值,并按平均工资降序
select count(*),`department_id`,avg(`salary`)
from `employees`
group by department_id
order by AVG(`salary`) desc

image

选择具有名个job_id的员工人数

#选择具有名个job_id的员工人数

SELECT COUNT(*),`job_id`
FROM `employees`
GROUP BY `job_id`

image

标签:salary,employees,查询,job,分组,MySQL,员工,id
来源: https://www.cnblogs.com/jgg54335/p/14933994.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有