考虑公司数据库的以下架构(主键以粗体显示。
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
)
由于这似乎是一个家庭作业问题,所以根据站点策略,将给出完整的答案:https://meta.stackexchange.com/a/10812
但是,似乎我们可以为您指出正确的方向。 :)
尝试将问题分解为多个步骤:
TOP
和ORDER BY
运算符。ORDER BY
可以按升序或降序工作。然后应该很明显如何将这些步骤组合成一个查询。
选择ProjectID来自EmployeeProject其中WORKHOURS =(选择MAX(WORKHOURS)来自EmployeeProject工作时间