首页 > 试题广场 >

统计各个部门平均薪资

[编程题]统计各个部门平均薪资
  • 热度指数:26690 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
某公司员工信息数据及员工薪资信息数据如下:
员工信息表staff_tb(staff_id-员工id,staff_name-员工姓名,staff_gender-员工性别,post-员工岗位类别,department-员工所在部门),如下所示:
staff_id staff_name staff_gender post department
1 Angus male Financial dep1
2 Cathy female Director dep1
3 Aldis female Director dep2
4 Lawson male Engineer dep1
5 Carl male Engineer dep2
6 Ben male Engineer dep1
7 Rose female Financial dep2
员工薪资信息表salary_tb(salary_id-薪资信息id,taff_id-员工id,normal_salary-标准薪资,dock_salary-扣除薪资),如下所示:
salary_id staff_id normal_salary dock_salary
10 1 12000 2500
11 2 11000 2200
12 3 9000 1800
13 4 10500 1900
14 5 13500 2100
15 6 7500 1000
16 7 50000 5000
问题:请统计各个部门平均实发薪资?
注:实发薪资=标准薪资-扣除薪资,统计平均薪资要求剔除薪资小于4000和大于30000的员工
要求输出:部门,平均实发薪资(保留3位小数)按照平均实发薪资降序排序
示例数据结果如下:
department avg_salary
dep2 9300.000
dep1 8350.000
解释:部门dep2共有员工3、5、7
实发薪资分别为9000-1800=7200、13500-2100=11400、50000-5000=45000>30000(剔除)
故结果为(7200+11400)/2=9300.000;
其他结果同理。
示例1

输入

drop table if exists  `staff_tb` ; 
CREATE TABLE `staff_tb` (
`staff_id` int(11) NOT NULL,
`staff_name` varchar(16) NOT NULL,
`staff_gender` char(8) NOT NULL,
`post` varchar(11) NOT NULL,
`department` varchar(16) NOT NULL,
PRIMARY KEY (`staff_id`));
INSERT INTO staff_tb VALUES(1,'Angus','male','Financial','dep1'); 
INSERT INTO staff_tb VALUES(2,'Cathy','female','Director','dep1'); 
INSERT INTO staff_tb VALUES(3,'Aldis','female','Director','dep2'); 
INSERT INTO staff_tb VALUES(4,'Lawson','male','Engineer','dep1'); 
INSERT INTO staff_tb VALUES(5,'Carl','male','Engineer','dep2'); 
INSERT INTO staff_tb VALUES(6,'Ben','male','Engineer','dep1'); 
INSERT INTO staff_tb VALUES(7,'Rose','female','Financial','dep2'); 

drop table if exists  `salary_tb` ; 
CREATE TABLE `salary_tb` (
`salary_id` int(11) NOT NULL,
`staff_id` int(11) NOT NULL,
`normal_salary` int(11) NOT NULL,
`dock_salary` int(11) NOT NULL,
PRIMARY KEY (`salary_id`));
INSERT INTO salary_tb VALUES(10,1,12000,2500); 
INSERT INTO salary_tb VALUES(11,2,11000,2200); 
INSERT INTO salary_tb VALUES(12,3,9000,1800); 
INSERT INTO salary_tb VALUES(13,4,10500,1900); 
INSERT INTO salary_tb VALUES(14,5,13500,2100); 
INSERT INTO salary_tb VALUES(15,6,7500,1000); 
INSERT INTO salary_tb VALUES(16,7,50000,5000);

输出

department|avg_salary
dep2|9300.000
dep1|8350.000
头像 牛客题解官
发表于 2025-02-25 15:08:41
精华题解 这道题目要求我们统计公司各个部门的平均实发薪资。我们要做的事情如下: 1. 确定总体问题 我们需要计算各个部门的平均实发薪资,要求剔除实发薪资小于4000和大于30000的员工,并按平均实发薪资降序排序。 2. 分析关键问题 连接表:将staff_tb和salary_tb表连接起来,以便获取每个员 展开全文
头像 xwha
发表于 2025-02-18 15:08:20
select department, round(sum(normal_salary-dock_salary)/count(*),3) as avg_salary from staff_tb join salary_tb using(staff_id) where normal_s 展开全文
头像 在思考的六边形战士很想去旅行
发表于 2025-08-01 16:15:22
select a.department, round(avg(b.normal_salary-b.dock_salary),3) as avg_salary from staff_tb a left join salary_tb b on a.staff_id = b 展开全文
头像 夸克__
发表于 2025-10-23 08:55:54
select a.department, round(avg(b.normal_salary - b.dock_salary), 3) as avg_salary from staff_tb as a join salary_tb as b on a.staff_id 展开全文
头像 刘青丰
发表于 2025-03-13 19:03:43
with t1 as ( select department,(normal_salary - dock_salary) as salary from staff_tb join salary_tb using(staff_id) ) select department,round( 展开全文
头像 BraveCoder
发表于 2025-11-07 21:02:47
select department, round(avg(normal_salary - dock_salary), 3) as avg_salary from salary_tb as a inner join staff_tb as b on a.staff_id 展开全文
头像 heyboysay
发表于 2025-04-21 18:52:49
with base_name as( select sa.salary_id , sa.staff_id , round(sa.normal_salary - sa.dock_salary,3) as diff_salary from 展开全文
头像 Tendernessnick
发表于 2025-11-19 10:34:08
with t1 as( select department, avg(normal_salary-dock_salary) as avg_salary from staff_tb left join salary_tb using(st 展开全文
头像 牛客963567466号
发表于 2025-11-14 11:57:53
select department, round(avg(normal_salary-dock_salary),3) avg_salary from staff_tb f join salary_tb s using(staff_id) where (normal_salary-dock_sal 展开全文
头像 淘气的懒羊羊就要上岸了
发表于 2026-01-28 21:20:59
select department ,round(avg(t2.ts),3) as avg_salary from staff_tb t1 right join (select * ,(normal_salary - dock_salary) as 展开全文
头像 L重启中
发表于 2025-09-10 12:03:00
select department ,round(avg(normal_salary - dock_salary),3) avg_salary from salary_tb join staff_tb on salary_tb.staff_id = staff_tb.staff_id where n 展开全文