gpt4 book ai didi

mysql - 计算总加类时间 MySQL

转载 作者:行者123 更新时间:2023-11-29 06:12:06 25 4
gpt4 key购买 nike

我正在创建一个时钟系统和管理网站。我正在尝试使用 MySQL 查询来获取特定部门的加类时间。

时钟会更新一个名为 events 的 MySQL 表,该表存储 employee_id、他们正在处理的 jobtime_in超时。我可以使用以下命令生成每个 employee_id 的总工作时间表:

SELECT employee_id, 
SEC_TO_TIME(SUM(TIMEDIFF(time_out,time_in))) AS hours
FROM events
GROUP BY employee_id;

这将返回一个包含 employee_id 及其工作总时间的表格。要创建 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 及其加类时间的表。

当我想找到所有员工的加类总数时,我遇到了麻烦。我以为我可以将 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())) 函数。

注意:加类费必须单独计算,我不能只采用总工作时间/员 worker 数 - 40。如果一个 worker 每周工作 30 小时,另一个 worker 每周工作 50 小时,则有 10 小时加类,但平均而言没有加类。

最佳答案

这个怎么样?

SELECT SUM(overtime)
FROM
(
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
)TOTAL

当您使用 SQL 实现复杂的业务逻辑时,嵌套查询具有一个关键优势:它们使您可以测试逻辑的每个级别并以可靠的方式构建它。

关于mysql - 计算总加类时间 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8595168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com