首页 > 试题广场 >

分析每个员工在不同项目中的绩效情况

[编程题]分析每个员工在不同项目中的绩效情况
  • 热度指数:178 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
【背景】:公司需要分析每个员工在不同项目中的绩效情况,现在需要你根据下面三个数据表,查询出每个员工在 2024 年上半年的绩效总评分以及在不同部门的绩效排名。
【原始表】:
employees(员工)表:
  • employee_id (员工 ID): 员工的唯一标识符
  • employee_name (员工姓名): 员工的姓名
  • department (部门): 员工所属的部门
projects(项目)表:
  • project_id (项目 ID): 项目的唯一标识符
  • project_name (项目名称): 项目的名称
  • start_date (开始日期): 项目的开始日期
performance(绩效)表:
  • performance_id (绩效 ID): 绩效的唯一标识符
  • employee_id (员工 ID): 员工的唯一标识符,用于关联员工表中的员工
  • project_id (项目 ID): 项目的唯一标识符,用于关联项目表中的项目
  • performance_score (绩效评分): 员工在该项目中的绩效评分
【要求】:根据上面这三个表格,查询每个员工的绩效情况,包含的字段:员工 ID、员工姓名、该员工在 2024 年上半年的绩效评分, 该员工在所属项目排名,该员工所属部门名称,该员工所属项目名称。查询出来的数据按照项目ID升序排列,再按照在所属项目的绩效排名升序排列,排名一致的按照员工ID升序排列。
  • employee_id: 员工的唯一标识符。
  • employee_name: 员工的姓名。
  • first_half_2024_score: 2024 年上半年的绩效评分。上半年 [ 2024-01-01——2024-07-01)
  • project_group_rank: 在所属项目的绩效排名。
  • department: 所属部门。
  • project_group: 所属项目组。
【示例】
employees(员工)表:

projects(项目)表:
performance(绩效)表:
【按照要求查询出来的表】
【解释】
上述示例中项目C的时间是2023-03-01,在查询要求中查询的是2024年上半年的绩效,所以在查询数据中不展示。对于项目组A2024-01-01有3个员工在项目中工作,分别是是employee_id 1、5、2,按照成绩排序顺序是1、5、2,1、5成绩一致都是80,然后再按照employee_id升序排列
示例1

输入

DROP TABLE IF EXISTS employees;
DROP TABLE IF EXISTS projects;
DROP TABLE IF EXISTS performance;
-- 创建表
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    employee_name VARCHAR(50),
    department VARCHAR(50)
);

CREATE TABLE projects (
    project_id INT PRIMARY KEY,
    project_name VARCHAR(50),
    start_date DATE
);

CREATE TABLE performance (
    performance_id INT PRIMARY KEY,
    employee_id INT,
    project_id INT,
    performance_score INT
    
);

-- 插入数据
INSERT INTO employees (employee_id, employee_name, department)
VALUES (1, '张三', '研发部'),
       (2, '李四', '市场部'),
       (3, '王五', '市场部'),
       (4, '赵六', '研发部'),
       (5, '周七', '研发部');

INSERT INTO projects (project_id, project_name, start_date)
VALUES (1, '项目 A', '2024-01-01'),
       (2, '项目 B', '2024-03-01'),
       (3, '项目 C', '2023-03-01');

INSERT INTO performance (performance_id, employee_id, project_id, performance_score)
VALUES (1, 1, 1, 80),
       (2, 2, 1, 70),
       (3, 3, 2, 95),
       (4, 4, 2, 88),
       (5, 5, 1, 80),
       (6, 5, 3, 80),
       (7, 1, 2, 88);

select * from employees;
select * from projects;
select * from performance;

输出

employee_id|employee_name|first_half_2024_score|project_group_rank|department|project_group
1|张三|80|1|研发部|项目 A
5|周七|80|2|研发部|项目 A
2|李四|70|3|市场部|项目 A
3|王五|95|1|市场部|项目 B
1|张三|88|2|研发部|项目 B
4|赵六|88|3|研发部|项目 B
头像 五首绝句哈
发表于 2025-06-20 09:33:10
SELECT a.employee_id, b.employee_name, a.performance_score as first_half_2024_score, ROW_NUMBER() OVER (PARTITION BY c.project_name OR 展开全文
头像 想当offer收割机的小松鼠很想回家
发表于 2025-06-19 16:25:06
#查询出每个员工在 2024 年上半年的绩效总评分以及在不同部门的绩效排名。 #查询出来的数据按照项目ID升序排列,再按照在所属项目的绩效排名升序排列,排名一致的按照员工ID升序排列。 select a.employee_id,employee_name, performance_s 展开全文
头像 想要offer的喜羊羊很有担当
发表于 2025-06-19 20:06:16
select t1.employee_id as employee_id, employee_name, performance_score as first_half_2024_score, rank() over (partition by project_name order by perfo 展开全文
头像 好事正酿
发表于 2025-06-18 11:46:15
select employee_id, employee_name, performance_score as first_half_2024_score, row_number() over ( partition by pr 展开全文
头像 牛客527342094号
发表于 2025-06-18 14:53:28
SELECT E.employee_id, employee_name, performance_score AS first_half_2024_score, row_number()over(partition by project_name order 展开全文
头像 牛客821079062号
发表于 2025-06-16 19:09:31
SELECT employee_id, employee_name, performance_score AS first_half_2024_score, ROW_NUMBER() OVER (PARTITION BY project_id ORDER BY performance_sc 展开全文