如何根据要求编写此SQL查询

问题描述 投票:-2回答:2

考虑公司数据库的以下架构(主键以粗体显示。

Employee (**EmployeeID**, Name, Office, Email, Sex, Salary, DepartmentID)
Department (**DepartmentID**, DepartmentName)
Project (**ProjectID**, DepartmentID, Duration)
EmployeeProject (**EmployeeID, ProjectID**, WorkHours)

使用SINGLE QUERY语句查找总工作时间第二长的产品。 请勿尝试使用上限或上限。

下面是我的解决方案,它相当丑陋且效率低下。

select projectid
from (
    select projectid, sum(workhours) as hours
    from employeeproject ep
    group by projectid
) sum
where hours = (
    select max(hours)
    from (
        select projectid, hours
        from (
            select projectid, sum(workhours) as hours
            from employeeproject ep
            group by projectid
        ) sum
        where hours < (
            select max(hours)
            from (
                select projectid, sum(workhours) as hours
                from employeeproject ep
                group by projectid
            ) sum
        )
    ) sec
)
sql database dml
2个回答
0
投票

由于这似乎是一个家庭作业问题,所以根据站点策略,将给出完整的答案:https://meta.stackexchange.com/a/10812

但是,似乎我们可以为您指出正确的方向。 :)

尝试将问题分解为多个步骤:

  1. [查找每个项目的总工作时间-您已经完成了。
  2. 查找两个最长的项目-查看TOPORDER BY运算符。
  3. 找到这两个项目中的最短项目-ORDER BY可以按升序或降序工作。

然后应该很明显如何将这些步骤组合成一个查询。


0
投票

选择ProjectID来自EmployeeProject其中WORKHOURS =(选择MAX(WORKHOURS)来自EmployeeProject工作时间

© www.soinside.com 2019 - 2024. All rights reserved.