如何用SQL统计当月总工时?现有查询结果不符合需求求修正
解决总工时统计为整数小时的问题
我来帮你搞定这个统计问题!先看你的SQL语句,有两个需要调整的地方,另外要得到你想要的整数小时数,我们需要对总分钟数做整数转换处理:
1. 修正字段拼写错误
你的数据表字段是working_hours和working_mint,但SQL里写成了working_hour和working_minit——这会导致数据库找不到对应字段,先把这个拼写问题修正过来。
2. 转换总分钟数为整数小时
你当前的计算得到的是总分钟数,要转换成整数小时,需要把总分钟数除以60并取整数部分(比如250分钟就是4小时,舍去多余的10分钟)。这里有两种常用方法:
方法一:使用FLOOR()函数向下取整
SELECT FLOOR( (SUM(working_hours)*60 + SUM(working_mint)) / 60 ) AS total_hours FROM task_details WHERE MONTH(task_date) = MONTH(CURRENT_DATE()) AND YEAR(task_date) = YEAR(CURRENT_DATE()) AND task_id=7797 AND member_id=92;
方法二:使用整数除法DIV(MySQL专属语法)
SELECT (SUM(working_hours)*60 + SUM(working_mint)) DIV 60 AS total_hours FROM task_details WHERE MONTH(task_date) = MONTH(CURRENT_DATE()) AND YEAR(task_date) = YEAR(CURRENT_DATE()) AND task_id=7797 AND member_id=92;
逻辑说明
SUM(working_hours)*60:把所有记录的小时数统一转换成分钟,方便和分钟字段相加+ SUM(working_mint):得到当月的总分钟数FLOOR(...) / 60或DIV 60:将总分钟数转换成整数小时,自动舍去小数部分,得到你需要的4、8这类整数结果
如果你的需求是四舍五入(比如250分钟算5小时),只需要把FLOOR()换成ROUND()就可以啦。
内容的提问来源于stack exchange,提问作者Sandip Sanghani
相关产品推荐
相关产品推荐

