我一直在浏览各种示例,但似乎无法得到正确的答案。我想要到达的是显示: staffID,表人员姓名 总数没有。员工参与的任务来自StaffWorksInTask (仅限参与大多数任务的人员)
员工:staffID,姓名
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
但是现在我完全陷入了这样的状况,即只能让列表显示涉及最多任务的员工(这样,其他员工都没有显示)。 请帮忙!!非常感谢!!
答案 0 :(得分:1)
您需要限制结果
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
答案 1 :(得分: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行开始)
答案 2 :(得分: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
确切的语法可能会有所不同 - 您没有指定使用的数据库平台。