我一直在滚动浏览各种示例,但似乎无法得到正确的答案。我在这里试图显示:员工ID,来自表员工的名字合计编号员工参与的任务数量(仅涉及最多任务的员工)
员工:员工 ID、姓名
StaffWorksInTask: staffID, taskID, projectID
我第一步做的是忽略过滤器部分:
SELECT COUNT(W.staffID), S.staffID, S.name
FROM Staff S, StaffWorksInTask W
WHERE S.staffID = W.staffID
GROUP BY W.staffID
但是现在我只是完全陷入了可以使列表仅显示涉及最多任务的员工的条件(因此,不会显示其他员工)。请帮忙!!非常感谢!!
你需要限制结果
SELECT COUNT(W.staffID) as total, S.staffID, S.name FROM Staff S, StaffWorksInTask WHERE S.staffID = W.staffID GROUP BY S.name,S.staffID ORDER BY total DESC LIMIT 1
据我了解,您只想看到一个顶级结果?
您可以执行以下操作:
SELECT COUNT(W.staffID) as counter, S.staffID, S.name
FROM Staff S, StaffWorksInTask W
WHERE S.staffID = W.staffID
GROUP BY S.staffID
ORDER BY counter DESC
LIMIT 0, 1
这将只显示一名工作人员 - 任务最多的员工
ORDER BY
子句按任务计数降序对结果进行排序,
LIMIT
子句确保您只看到 1 个结果(从第 0 行开始)
正如@jarlh所说,你的分组是从后到前的。
SELECT TOP 1 COUNT(W.staffID) as c, S.staffID, S.name
FROM Staff S, StaffWorksInTask W
WHERE S.staffID = W.staffID
GROUP BY S.staffID, S.name
ORDER BY c DESC
确切的语法可能会有所不同 - 您没有指定正在使用的数据库平台。