假设你有一个名为employees的表,存储了员工的信息。示例表如下:

请编写一个SQL查询,找出每个部门薪资排名前两名的员工信息,并按部门和薪资降序排列。要求使用窗口函数来完成。 示例输出如下:

drop table if exists employees;
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
employee_name VARCHAR(50),
department VARCHAR(50),
salary DECIMAL(10, 2),
hire_date DATE
);
INSERT INTO employees (employee_id, employee_name, department, salary, hire_date)
VALUES
(1, 'John Doe', 'Sales', 5000.00, '2022-01-01'),
(2, 'Jane Smith', 'Sales', 5000.00, '2022-02-01'),
(3, 'Smith', 'Sales', 5000.00, '2022-02-01'),
(4, 'Michael Johnson', 'Sales', 4800.00, '2022-03-01'),
(5, 'David Brown', 'HR', 4000.00, '2022-01-01'),
(6, 'Jennifer Davis', 'HR', 4200.00, '2022-02-01'),
(7, 'Davis', 'HR', 4200.00, '2022-02-01'),
(8, 'Robert Wilson', 'HR', 3800.00, '2022-03-01'),
(9, 'Emily Thompson', 'Finance', 5500.00, '2022-01-01'),
(10, 'Daniel Lee', 'Finance', 5200.00, '2022-02-01'),
(11, 'Olivia Harris', 'Finance', 5300.00, '2022-03-01');department|employee_name|salary Finance|Emily Thompson|5500.00 Finance|Olivia Harris|5300.00 HR|Jennifer Davis|4200.00 HR|Davis|4200.00 Sales|John Doe|5000.00 Sales|Jane Smith|5000.00 Sales|Smith|5000.00
考点:排序
限制 1 秒 / 256MB | SQL 题
本题是 SQL 题:给出建表语句与目标结果,要求写出查询语句。
建议步骤
GROUP BY 聚合,过滤分组结果用 HAVING。ROW_NUMBER()、RANK()、SUM() OVER)。易错点:排序方向写反;GROUP BY 后选了非分组字段;没做 ROUND 保留小数;空值参与聚合。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2023年秋招-京东-技术通用岗位-第一批笔试。