题目描述
(通过次数15,956 | 提交次数22,795,通过率70.00%)
项目表Project: +-------------+---------+ | Column Name | Type | +-------------+---------+ | project_id | int | | employee_id | int | +-------------+---------+ 主键为 (project_id, employee_id)。 employee_id 是员工表 Employee 表的外键。 员工表Employee: +------------------+---------+ | Column Name | Type | +------------------+---------+ | employee_id | int | | name | varchar | | experience_years | int | +------------------+---------+ 主键是 employee_id。 请写一个 SQL语句,查询每一个项目中员工的平均工作年限,精确到小数点后两位。 查询结果的格式如下: Project 表: +-------------+-------------+ | project_id | employee_id | +-------------+-------------+ | 1 | 1 | | 1 | 2 | | 1 | 3 | | 2 | 1 | | 2 | 4 | +-------------+-------------+ Employee 表: +-------------+--------+------------------+ | employee_id | name | experience_years | +-------------+--------+------------------+ | 1 | Khaled | 3 | | 2 | Ali | 2 | | 3 | John | 1 | | 4 | Doe | 2 | +-------------+--------+------------------+ Result 表: +-------------+---------------+ | project_id | average_years | +-------------+---------------+ | 1 | 2.00 | | 2 | 2.50 | +-------------+---------------+ 第一个项目中,员工的平均工作年限是 (3 + 2 + 1) / 3 = 2.00;第二个项目中,员工的平均工作年限是 (3 + 2) / 2 = 2.50 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/project-employees-i
//测试数据 Create table If Not Exists Project (project_id int, employee_id int); Create table If Not Exists Employee (employee_id int, name varchar(10), experience_years int); insert into Project (project_id, employee_id) values ('1', '1'); insert into Project (project_id, employee_id) values ('1', '2'); insert into Project (project_id, employee_id) values ('1', '3'); insert into Project (project_id, employee_id) values ('2', '1'); insert into Project (project_id, employee_id) values ('2', '4'); insert into Employee (employee_id, name, experience_years) values ('1', 'Khaled', '3'); insert into Employee (employee_id, name, experience_years) values ('2', 'Ali', '2'); insert into Employee (employee_id, name, experience_years) values ('3', 'John', '1'); insert into Employee (employee_id, name, experience_years) values ('4', 'Doe', '2');
解题思路
Project表保存了每个项目下所有的员工ID。
Employee表保存了每个员工的基本信息,包括员工的工作年限。
题目要求:查询每个项目下所有员工的平均工作年限。
因为项目ID保存在Project表,而员工的工作年限保存在Employee表,所以需要将两张表关联起来。又因为Employee表保存了所有员工的信息,所以这里使用INNER JOIN或LEFT JOIN都可以。
然后,在关联出的结果中,使用project_id分组,求出员工工作年限experience_years的平均值即可。
注意,题目要求,对平均值保留两位小数,可以使用ROUND函数实现。
参考SQL
未特别说明的情况下,参考SQL为基于MySQL8.0实现。
select a.project_id, round(avg(b.experience_years),2) average_years from Project a inner join Employee b on a.employee_id = b.employee_id group by a.project_id;
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。