我正在创建一个时钟系统和管理网站。我正在尝试使用 MySQL 查询来提取特定部门的加班时间。
时钟更新一个名为 events 的 MySQL 表,该表存储employee_id
、job
他们正在处理的、time_in
和time_out
. 我可以制作一个表格,其中包含每个人的总工作时间employee_id
:
SELECT employee_id,
SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))) AS hours
FROM events
GROUP BY employee_id;
这将返回一个employee_id
s 表和他们工作的总小时数。要创建一个employee_id
加班表,我使用:
SELECT employee_id,
IF(HOUR(SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))))>40,
HOUR(SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))))-40,
0) AS overtime
FROM events
GROUP BY employee_id;
这将返回一个employee_id
s 表和他们工作的加班时间。
当我想找到所有员工的加班总数时,我遇到的麻烦就开始了。我以为我可以将IF
函数放入其中,SUM()
但是当我运行以下语句时:
SELECT SUM(IF(HOUR(SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))))>40,
HOUR(SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))))-40,
0)) AS overtime
FROM events;
我得到了这个错误:
ERROR 1111 (HY000): Invalid use of group function
我已经到处寻找了,但几乎没有发现任何SUM(IF(SUM()))
功能。
注:加班费要单独计算,不能随便拿total hours worked / number of employees - 40
。如果一个工人每周工作 30 小时,而另一个工人工作 50 小时,则有 10 小时的加班时间,但平均来说没有。