我有两张表,其中有几列是他们的,例如 task_master和logtime。
Taskmaster表包含以下列:
taskid
Actualhours
AssignedTo
createdDate
EmployeeHours
PlannedHours
status,
task_name
task_key
Logtime表格如下:
logid
date
empolyeid
hours
remarks
taskid
所以我的问题是,是否有一名员工已完成多项任务
例如:ABC曾在taskid 1,2,3
工作,而taskid 2
已经花了5个小时,EFG已经在taskid 2,3,4
工作了,而对于taskid 2,他花了14个小时,
我的问题是我要计算两个或更多的实际小时数,而不是相同的任务。
所以我的Actualhours应该是19个小时..
提前谢谢。
我尝试了这个命令,但是它给了我employeeid的输出,他已经处理了一些taskid,但我想知道所有员工花了多少时间来完成某项任务
SELECT
logtime.employeeId
, logtime.taskId
, sum(hours) as EmployeeHours
, task_master.Task_Key
, task_master.ActualHours
, task_master.Task_Name
, task_master.AssignedToInJira
, task_master.CreatedDate
, task_master.UpdatedDate
, task_master.Status
, task_master.PlannedHours
, task_master.Task_Description
FROM logtime join task_master
where logtime.taskId=task_master.taskId
and logtime.employeeId=4
GROUP By taskId,employeeId
limit 0,1000
答案 0 :(得分:1)
如果我理解正确,您希望员工在给定任务中工作的所有小时数总和,对吗?
如果是,那么你可以这样做:
CREATE VIEW ACTUAL_HOURS AS
select taskid, sum(hours) as actual_hours
from logtime
group by taskid
order by taskid;
然后,您通过taskid与task_master加入此视图。
答案 1 :(得分:0)
尝试这样
SELECT logtime.employeeId,logtime.taskId,sum(hours) as EmployeeHours,
task_master.Task_Key,task_master.ActualHours,task_master.Task_Name
,task_master.AssignedToInJira,task_master.CreatedDate,
task_master.UpdatedDate,task_master.Status,task_master.PlannedHours,
ta.totalhours,
task_master.Task_Description FROM logtime join task_master on
logtime.taskId=task_master.taskId join
(select sum(hours) as totalhours ,taskId from logtime group by taskId)
as ta on ta.taskId=task_master.taskId where
logtime.employeeId=4 GROUP By taskId,
employeeId limit 0,1000
答案 2 :(得分:0)
如果您不希望在结果中使用employeeid,则不要将其包含在查询中。特别是不要将它包含在GROUP BY子句中,因为您将在每个taskid上为每个employeeid获取一个新行
SELECT
logtime.taskId
, SUM(logtime.hours) AS EmployeeHours
FROM logtime
JOIN task_master ON logtime.taskId = task_master.taskId
WHERE logtime.employeeId = 4
GROUP BY
logtime.taskId
;
例如,如果查询在之后看起来像这样,您将获得更多行
SELECT
logtime.employeeId
, logtime.taskId
, SUM(logtime.hours) AS EmployeeHours
FROM logtime
JOIN task_master ON logtime.taskId = task_master.taskId
WHERE logtime.employeeId = 4
GROUP BY
logtime.employeeId
, logtime.taskId
;
现在:因为你使用MySQL,你需要了解一些东西。 MySQL允许"捷径"在GROUP BY的语法中,你永远不应该使用那个捷径。有关详细信息:https://dev.mysql.com/doc/refman/5.0/en/group-by-handling.html此"扩展程序"建议不要使用MySQL中的GROUP BY。
因此:对于不使用聚合函数的每一列,您需要在GROUP BY子句中包含该列。
因此,如果您想要更多列,例如任务名称,那么查询将如下所示:
SELECT
logtime.taskId
, task_master.Task_Key
, task_master.Task_Name
, task_master.AssignedToInJira
, task_master.CreatedDate
, task_master.UpdatedDate
, task_master.Status
, task_master.PlannedHours
, task_master.Task_Description
, SUM(logtime.hours) AS EmployeeHours
FROM logtime
JOIN task_master ON logtime.taskId = task_master.taskId
WHERE logtime.employeeId = 4
GROUP BY
logtime.taskId
, task_master.Task_Key
, task_master.Task_Name
, task_master.AssignedToInJira
, task_master.CreatedDate
, task_master.UpdatedDate
, task_master.Status
, task_master.PlannedHours
, task_master.Task_Description
;
但是,要小心一点,因为GROUP BY中包含的每一列都可能会增加行数。