京东 · 排序 · 算法编程题
京东 排序 时限 1 秒 / 256 MB

题目描述

某公司员工信息数据及员工薪资信息数据如下:
员工信息表staff_tb(staff_id-员工id,staff_name-员工姓名,staff_gender-员工性别,post-员工岗位类别,department-员工所在部门),如下所示:
图片
员工薪资信息表salary_tb(salary_id-薪资信息id,staff_id-员工id,normal_salary-标准薪资,dock_salary-扣除薪资),如下所示:
图片
问题:请统计各个部门平均实发薪资和各部门男、女员工平均实发薪资各是多少?
注:实发薪资=标准薪资-扣除薪资
要求输出:部门,平均实发薪资(保留2位小数)按照部门平均薪资降序排列(当出现不存在某类型员工,平均薪资用0.00表示)
·
department: 部门名称。
·
average_actual_salary: 每个部门员工的实际平均薪资,保留了两位小数。
·
average_actual_salary_male: 每个部门男员工的实际平均薪资,保留了两位小数。
·
average_actual_salary_female: 每个部门女员工的实际平均薪资,保留了两位小数。
示例数据结果如下:
图片
解释:部门dep2有3个员工:
实发薪资和性别分别为:3号female员工11000-2200=8800、5号male员工16000-2500=13500、7号female员工60000-6000=54000
故结果为dep2部门平均薪资是(8800+13500+54000)/ 3=25433.33、average_actual_salary_male是13500/1=13500.00、average_actual_salary_female是(8800+54000)/2=31400.00
其他结果同理。

样例共 1 组

样例 1
输入
drop table if exists staff_tb ;
drop table if exists salary_tb ;
-- 创建 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));

-- 插入 staff_tb 表数据
INSERT INTO staff_tb (staff_id, staff_name, staff_gender, post, department) VALUES
(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 表数据
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));
-- 插入 salary_tb 表数据
INSERT INTO salary_tb (salary_id, staff_id, normal_salary, dock_salary) VALUES
(10, 1, 15000, 3000),
(11, 2, 14000, 2800),
(12, 3, 11000, 2200),
(13, 4, 13000, 2400),
(14, 5, 16000, 2500),
(15, 6, 9000, 1200),
(16, 7, 60000, 6000);
输出
department|average_actual_salary|average_actual_salary_male|average_actual_salary_female
dep2|25433.33|13500.00|31400.00
dep1|10400.00|10133.33|11200.00

算法解析依据一般

考点:排序

限制 1 秒 / 256MB | SQL 题

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

本题是 SQL 题:给出建表语句与目标结果,要求写出查询语句。

建议步骤

  1. 先读样例里的建表语句,理清有哪几张表、每张表的字段含义与关联键。
  2. 明确输出字段与输出顺序——排序、列名、小数位数通常都是得分点。
  3. 需要「按某维度统计」时用 GROUP BY 聚合,过滤分组结果用 HAVING
  4. 需要排名或累计时用窗口函数(ROW_NUMBER()RANK()SUM() OVER)。
  5. 拿样例数据在本地跑一遍,确认输出与样例逐行一致。

易错点:排序方向写反;GROUP BY 后选了非分组字段;没做 ROUND 保留小数;空值参与聚合。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2024年春招-京东-技术通用岗位-第三批笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解