mysql:查找条目有多行的列的最大值

时间:2014-11-04 20:21:11

标签: mysql sql sum max

很抱歉标题混乱。我有一张桌子,每个员工都有一小时的工作时间。我还有他们正在处理的项目的员工ssn列和项目id列。我想找到最有效的项目,但是,我不能使用简单的max,因为每个项目都有多行,根据这些行,员工已经工作了很长时间。

EmployeeSSN    ProjectNum    Hours
1              1             20
2              4             30
3              1             15

在这个例子中,我希望返回项目1。以下是我目前的代码

select project.pname, works_on.pno, sum(works_on.hours)
from works_on
    join project
        on works_on.pno = project.pnumber
group by works_on.pno
limit 1

这很接近,它返回特定项目处理的总小时数(在这种情况下,由于限制1,它显示项目一)。如果有一种方法将总和(works_on.hours)包装在max()中,我认为会这样做。但是,这给了我一个错误,所以我没做错。

2 个答案:

答案 0 :(得分:1)

尝试使用最长时间返回1行:

select project.pname, works_on.pno, sum(works_on.hours) AS hours
from works_on
    join project
        on works_on.pno = project.pnumber
group by works_on.pno
order by hours desc
limit 1

我快速尝试了我们的CRM,它似乎恢复了预期的效果。

答案 1 :(得分:0)

您的第一个查询非常接近,但您只是缺少order by子句。如果您按照递减顺序按项目工作的小时数进行排序,并且限制为1,则您将有效地获得最大值。尝试将其更改为:

SELECT p.pname, p.pnumber, SUM(wo.hours) AS totalHours
FROM works_on wo
JOIN project p ON p.pnumber = wo.pno
GROUP BY p.pnumber
ORDER BY totalHours DESC
LIMIT 1;