📜  门| GATE-IT-2004 |问题15(1)

📅  最后修改于: 2023-12-03 15:28:46.098000             🧑  作者: Mango

门(GATE)-IT-2004 问题15

问题描述

一个数据库中有五个表,分别为:Employee,Department,Section,Project,Works_On。

  • Employee 表包含员工的 id,名字和部门 id。
  • Department 表包含部门 id 和部门名称。
  • Section 表包含科室 id 和科室名称。
  • Project 表包含项目 id 和项目名称。
  • Works_On 表包含员工 id,项目 id 和员工在该项目中的工时。

现在你需要写一个 SQL 查询语句,返回所有在名称为“ScienceCentre”的项目中工作的员工的名字和他们总工时,需要按总工时的降序排列。

解决方案

首先,我们需要使用 INNER JOIN 操作来获取 Works_On 和 Employee 表中的信息。然后,使用一个子查询来获取名称为“ScienceCentre”的项目 id,最后使用 GROUP BY 和 SUM 函数来计算每个员工在该项目中的总工时,并按总工时的降序排列。

以下是 SQL 查询语句的代码示例:

SELECT Employee.name, SUM(Works_On.hours) AS total_hours
FROM Works_On
INNER JOIN Employee ON Works_On.emp_id = Employee.id
WHERE Works_On.project_id = (SELECT id FROM Project WHERE name = 'ScienceCentre')
GROUP BY Employee.name
ORDER BY total_hours DESC;
解释

首先,我们使用 INNER JOIN 操作将 Works_On 表和 Employee 表联接起来,根据员工 id 联接。这样,我们就可以获取 Works_On 表和 Employee 表中的员工信息。

INNER JOIN Employee ON Works_On.emp_id = Employee.id

接下来,我们使用 WHERE 子句来过滤只有在名称为“ScienceCentre”的项目中工作的员工,并使用子查询来获取该项目的 id。

WHERE Works_On.project_id = (SELECT id FROM Project WHERE name = 'ScienceCentre')

最后,我们使用 GROUP BY 和 SUM 函数计算每个员工在该项目中的总工时,并按总工时的降序排列。

GROUP BY Employee.name
ORDER BY total_hours DESC;
结论

本文介绍了如何使用 SQL 查询语句来获取在名称为“ScienceCentre”的项目中工作的员工的名字和他们总工时。SQL 查询语句使用 INNER JOIN 操作和子查询来联接不同的表和获取信息,使用 GROUP BY 和 SUM 函数来计算员工的总工时并按总工时的降序排列。