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

题目描述

公司的员工信息是人力资源管理的重要组成部分,请根据提供的员工信息表和最近的员工信息更新表,更新员工的职位信息。
员工信息表 EMPLOYEE_INFO示例如下,其中 EMPLOYEE_ID 是员工编号,POSITION 是员工职位,LAST_UPDATE_DT 是最后一次职位信息更新时间。
图片
员工信息更新表 EMPLOYEE_UPDATE示例如下,其中 EMPLOYEE_ID 是员工编号,UPDATE_DT 是信息更新时间,NEW_POSITION 是员工新职位。
图片
但是现在遇到的问题是,EMPLOYEE_INFO表和EMPLOYEE_UPDATE表的信息不是一一匹配了。
你现在需要结合这2个表,输出一个最新的员工职位信息和更新时间。
遵循以下原则:
对于每个员工,首先在更新表EMPLOYEE_UPDATE中找到每个员工最晚的UPDATE_DT。
1.如果更新表EMPLOYEE_UPDATE中"最晚的UPDATE_DT"晚于EMPLOYEE_INFO表中的”LAST_UPDATE_DT“,则输出的职位信息和更新时间=更新表中的职位和时间。
2.否则的话,则输出的职位信息和更新时间=EMPLOYEE_INFO表中的职位和时间。
最后的输出结果最后结果按照EMPLOYEE_ID升序排序。
示例输出如下:
EMPLOYEE_ID|POSITION|LAST_UPDATE_DT
EMP001|Manager|2022-03-15
EMP002|Senior Manager|2022-03-17
EMP003|Manager|2023-01-01
EMP001在更新表里的最晚UPDATE_DT为2022-03-15,和EMPLOYEE_INFO里的一样,输出EMPLOYEE_INFO表中的职位和时间
EMP002在更新表里的最晚UPDATE_DT为2022-03-16,晚于EMPLOYEE_INFO里的LAST_UPDATE_DT,输出EMPLOYEE_UPDATE表中的职位和时间
EMP003在更新表里的最晚UPDATE_DT为2022-03-16,早于EMPLOYEE_INFO里的LAST_UPDATE_DT,输出EMPLOYEE_INFO表中的职位和时间

样例共 1 组

样例 1
输入
drop table if exists EMPLOYEE_INFO;
CREATE TABLE EMPLOYEE_INFO (
    EMPLOYEE_ID VARCHAR(10) PRIMARY KEY,
    POSITION VARCHAR(50),
    LAST_UPDATE_DT DATE
);
INSERT INTO EMPLOYEE_INFO (EMPLOYEE_ID, POSITION, LAST_UPDATE_DT)
VALUES
    ('EMP001', 'Manager', '2022-03-15'),
    ('EMP002', 'Sales Associate', '2022-03-16'),
    ('EMP003', 'Manager', '2023-01-01');



drop table if exists EMPLOYEE_UPDATE;
CREATE TABLE EMPLOYEE_UPDATE (
    EMPLOYEE_ID VARCHAR(10),
    UPDATE_DT DATE,
    NEW_POSITION VARCHAR(50)
);
INSERT INTO EMPLOYEE_UPDATE (EMPLOYEE_ID, UPDATE_DT, NEW_POSITION)
VALUES
    ('EMP001', '2022-03-13', 'Director'),
    ('EMP002', '2022-03-14', 'Senior Associate'),
    ('EMP001', '2022-03-15', 'Senior Director'),
    ('EMP002', '2022-03-16', 'Associate Manager'),
    ('EMP003', '2022-03-16', 'Associate Manager'),
    ('EMP002', '2022-03-17', 'Senior Manager');
输出
EMPLOYEE_ID|POSITION|LAST_UPDATE_DT
EMP001|Manager|2022-03-15
EMP002|Senior Manager|2022-03-17
EMP003|Manager|2023-01-01

算法解析依据一般

考点:排序

限制 1 秒 / 256MB | SQL 题

题目画像

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

解题思路

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

建议步骤

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

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

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

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

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