SQL-每日一题【1075. 项目员工 I】

题目

项目表 Project: 

SQL-每日一题【1075. 项目员工 I】_第1张图片

员工表 Employee

SQL-每日一题【1075. 项目员工 I】_第2张图片 

请写一个 SQL 语句,查询每一个项目中员工的 平均 工作年限,精确到小数点后两位

查询结果的格式如下:

SQL-每日一题【1075. 项目员工 I】_第3张图片

SQL-每日一题【1075. 项目员工 I】_第4张图片 

SQL-每日一题【1075. 项目员工 I】_第5张图片 

 

解题思路

前置知识

AVG 函数
定义和用法:
AVG 函数返回数值列的平均值。NULL 值不包括在计算中。
SQL AVG() 语法:

SELECT AVG(column_name) FROM table_name

AVG() 实例:
我们拥有下面这个 “Orders” 表:

SQL-每日一题【1075. 项目员工 I】_第6张图片

 

例子 1
现在,我们希望计算 “OrderPrice” 字段的平均值。
我们使用如下 SQL 语句:

SELECT AVG(OrderPrice) AS OrderAverage FROM Orders

SQL-每日一题【1075. 项目员工 I】_第7张图片

 

例子 2
现在,我们希望找到 OrderPrice 值高于 OrderPrice 平均值的客户。
我们使用如下 SQL 语句:

SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

SQL-每日一题【1075. 项目员工 I】_第8张图片

 

了解了avg()函数后,我们来看一下这道题 

1.题目要求我们查询每一个项目中员工的 平均 工作年限,精确到小数点后两位。我们可以用左连接来解决这个问题

2.首先我们将project表和employee表进行左连接,连接条件是 employee_id 相等,之后我们再对 project_id 进行分组,然后算出分组后各个组内的 experience_years 的平均值,并且保留两位小数即可。

代码实现

select project_id, round(avg(experience_years), 2) as average_years 
from Project as p left join Employee as e 
on (p.employee_id = e.employee_id) 
group by p.project_id

 

测试结果

SQL-每日一题【1075. 项目员工 I】_第9张图片

你可能感兴趣的:(sql,数据库)